On 05/10/15 10:01, Dmitry Olshansky wrote:

When D structs has a destructor that is guaranteed to run for any
instance that finished construction, no matter what is the use case,
then we can have that discussion.


Supposed to be the case for structs except for any bugs.


Check this one out (no instances on heap):
import std.stdio;

struct destructible {
    int id;

    @disable this();
    this( int id ) {
        writeln("Id ", id, " constructed");
        this.id = id;
    }

    ~this() {
        writeln("Id ", id, " destructed");
    }
}

void main() {
    struct container {
        destructible d;

        @disable this();
        this( int id )
        {
            this.d = destructible(id);
            throw new Exception("some random exception");
        }
    }

    try {
        container(2);
    } catch( Exception ex ) {
        writeln("Caught ", ex.msg);
    }
}

As of dmd 2.068.2, the output is:
Id 2 constructed
Caught Some random exception

Of course, if I do not disable this(), things are even worse.

Reply via email to