digitalmars.D.bugs - [Issue 13661] New: static array init does not call destructors
- via Digitalmars-d-bugs (44/44) Oct 27 2014 https://issues.dlang.org/show_bug.cgi?id=13661
https://issues.dlang.org/show_bug.cgi?id=13661 Issue ID: 13661 Summary: static array init does not call destructors Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: shachar shemesh.biz Please consider the following program: import std.stdio; struct S { int x; this(this) { writeln("this(this)"); } ~this() { writeln("~this()", &this, " ", x); } ref auto opAssign(T)(T arg) { x = arg.x; writeln("opAssign ", T.stringof, " x=", x); return this; } } void main() { S[2] a; S[2] b; a[0].x = 12; a[1].x = 17; // a = b; // 1 a = a.init; // 2 // a[] = S.init; // 3 writeln("end a=", a[0].x, ", ", a[1].x); } At no point is a destructor called for x=12 or x=17. No opAssign is called at all. Replacing the line marked "2" with either "1" or "3" works just fine. This is a major blocker for implementing RAII type resource management. --
Oct 27 2014