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