On Sat, Aug 24, 2013 at 01:09:44PM -0700, H. S. Teoh wrote:
[...]
> On Sat, Aug 24, 2013 at 12:27:37PM -0700, Walter Bright wrote:
[...]
> > 4. The worst issue is the DIP assumes there is only one constructor,
> > from which the destructor is inferred. What if there is more than
> > one constructor?
> 
> This is not a problem. If there is more than one constructor, then
> only those scope(this) statements in the ctor that were actually
> encountered will trigger when the object reaches the end of its
> lifetime.  You already have to do this anyway, since if the ctor
> throws an Exception before completely constructing the object, only
> those scope(this) statements that have been encountered up to that
> point will be triggered, not all of them. Otherwise, you'd still have
> the partially-initialized object problem.
[...]

Argh, that was poorly worded. What I mean is this:

        struct S {
                this(int) {
                        scope(this) writeln("A");
                }
                this(float) {
                        scope(this) writeln("B");
                }
        }

        void fun1() {
                auto s = S(1);
        }       // prints "A"

        void fun2() {
                auto s = S(1.0);
        }       // prints "B"


T

-- 
Dogs have owners ... cats have staff. -- Krista Casada

Reply via email to