digitalmars.D.bugs - [Issue 21693] New: extern(C++) class instance dtors are never
- d-bugmail puremagic.com (46/46) Mar 08 2021 https://issues.dlang.org/show_bug.cgi?id=21693
https://issues.dlang.org/show_bug.cgi?id=21693 Issue ID: 21693 Summary: extern(C++) class instance dtors are never called, breaking RAII Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: critical Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: thomas.bockman gmail.com The program below never destroys its extern(C++) class instances, breaking RAII. Output since 2.066: Destroying stack D instance. Destroying heap D instance. The destructor should definitely be called for the `scope` instance, as it would be for a struct on the stack. The heap instance's destructor should also be called, OR trying to allocate an instance of an extern(C++) class that has a destructor on the GC heap using `new` should be a compile-time error. ///////////////////////////////////// extern(C++) class C { bool onStack; this(bool onStack) { this.onStack = onStack; } ~this() { writeln("Destroying ", onStack? "stack" : "heap", " C instance."); } } extern(D) class D { bool onStack; this(bool onStack) { this.onStack = onStack; } ~this() { writeln("Destroying ", onStack? "stack" : "heap", " D instance."); } } void main() { scope stackC = new C(true); auto heapC = new C(false); scope stackD = new D(true); auto heapD = new D(false); } ///////////////////////////////////// Related: https://issues.dlang.org/show_bug.cgi?id=21692 --
Mar 08 2021