http://d.puremagic.com/issues/show_bug.cgi?id=6437
Ferdinand Majerech <kiithsa...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kiithsa...@gmail.com --- Comment #1 from Ferdinand Majerech <kiithsa...@gmail.com> 2012-01-12 12:29:56 PST --- The destructor call seems to happen in struct specialization of emplace(), which is called from RefCounted._RefCounted.initialize() . The result variable in emplace() has its destructor called when it goes out of scope.(In reply to comment #0) > module globaldtors; > import std.typecons; > > import std.stdio; > > struct Foo > { > struct Payload > { > this(int x) > { > writeln("constructor called"); > } > > ~this() > { > writeln("destructor called"); > } > > this(this) { assert(false); } > void opAssign(Foo.Payload rhs) { assert(false); } > } > > private alias RefCounted!(Payload, RefCountedAutoInitialize.yes) Data; > Data data; > > this (int x) > { > data = Data(x); > } > } > > Foo foo; > > void main() > { > /+ > + destructor called <- this should not happen > + constructor called > + <- where's the dtor call? > +/ > // foo = Foo(1); > > > /+ > + destructor called <- this should not happen > + constructor called > + destructor called > +/ > // auto bar = Foo(1); > } > > Uncomment the two assignments individually to verify they print what's in the > comments. Regardless if it's a global or not, a dtor is being called first for > some reason, this looks like a bug. > > But if the variable is also a global (TLS/shared doesn't matter), the dtor is > not called on application exit. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------