On 28/03/18 02:23, Timothee Cour wrote:
that comment was regarding -betterC
RAII (with structs) has been available in D for a while, eg:

```d
struct A{
   ~this(){...}
}

void fun(){
   A a; // when a goes out of scope, will call dtor deterministically
}
```


Not so long as destructors don't reliably run.

$ dmd --version
DMD64 D Compiler v2.079.0
Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright

$ cat test.d
import std.stdio;

struct A {
    int a;

    this(int a) {
        this.a = a;

        writefln("A(%s) constructed", a);
    }

    ~this() {
        writefln("A(%s) destructed", a);
    }
}

struct B {
    A a;

    this(int val) {
        a = A(val);
        throw new Exception("Constructor failed");
    }
}

void main() {
    try {
        auto a = A(1);
        auto b = B(2);
    } catch(Exception ex) {
        writefln("Caught: %s", ex.msg);
    }
}

$ rdmd test.d
A(1) constructed
A(2) constructed
A(1) destructed
Caught: Constructor failed

https://issues.dlang.org/show_bug.cgi?id=14246

Reply via email to