digitalmars.D.bugs - [Issue 17869] New: scope class object no longer deleted when created
- d-bugmail puremagic.com (51/51) Oct 01 2017 https://issues.dlang.org/show_bug.cgi?id=17869
https://issues.dlang.org/show_bug.cgi?id=17869 Issue ID: 17869 Summary: scope class object no longer deleted when created via factory function Product: D Version: D2 Hardware: x86_64 OS: Windows Status: NEW Keywords: wrong-code Severity: regression Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: r.sagitario gmx.de import core.stdc.stdio; void foo() { scope baseKey = Key.getKey(); } int main(string[] argv) { printf("main init\n"); foo(); printf("main exit\n"); return 0; } class Key { private: this() { printf("ctor\n"); } ~this() { printf("dtor\n"); } static Key getKey() { return new Key(); } } //////////////////////// This prints main init ctor dtor main exit with dmd 2.074 and main init ctor main exit dtor with dmd 2.075+, i.e. the class instance assigned to the scope variable is destroyed in the final collection, not in foo's scope. The 2.074 version is according to spec IMO: "... the destructor for an object is automatically called when the reference to it goes out of scope." Probably introduced by https://github.com/dlang/dmd/pull/6826 --
Oct 01 2017