D.gnu - destructor ~this() for static "members." doesn't seem to get called
- sclytrack (41/41) Feb 18 2007 import std.stdio;
- Cesar Rabak (4/53) Feb 18 2007 OK, is this supposed to be 'automatic' by the D language definition or a...
- Sclytrack (4/11) Feb 19 2007 It is just that I didn't expect this behavior, anyways, it seems
- Derek Parnell (53/106) Feb 19 2007 It's the programmer responsibility in this situation. I guess you were
- Sclytrack (4/15) Feb 19 2007 Yes, I was kind of expecting that. :-)
import std.stdio; class Testb { this() { writefln("testb constructor"); } ~this() { writefln("testb destructor"); //Doesn't output on screen. } } class Testy { static Testb inner = null; //Destructor of Testb doesn't appear to be called. this() { writefln("testy constructor"); inner = new Testb(); } ~this() { writefln("testy destructor"); } } int main() { writefln("gdc version 0.22"); Testy t = new Testy(); return 0; } It outputs the following lines: ./a.out gdc version 0.22 testy constructor testb constructor testy destructor The destructor of testb doesn't get called, before the termination of the application, or that is at least my perception. Go go D, go :-)
Feb 18 2007
sclytrack escreveu:import std.stdio; class Testb { this() { writefln("testb constructor"); } ~this() { writefln("testb destructor"); //Doesn't output on screen. } } class Testy { static Testb inner = null; //Destructor of Testb doesn't appear to be called. this() { writefln("testy constructor"); inner = new Testb(); } ~this() { writefln("testy destructor"); } } int main() { writefln("gdc version 0.22"); Testy t = new Testy(); return 0; } It outputs the following lines: ./a.out gdc version 0.22 testy constructor testb constructor testy destructor The destructor of testb doesn't get called, before the termination of the application, or that is at least my perception.OK, is this supposed to be 'automatic' by the D language definition or a responsibility of the programmer of including an explicit call to testb destructor in the testy one?
Feb 18 2007
It is just that I didn't expect this behavior, anyways, it seems but to make the call explicit. Go go D :-)The destructor of testb doesn't get called, before the termination of the application, or that is at least my perception.OK, is this supposed to be 'automatic' by the D language definition or a responsibility of the programmer of including an explicit call to testb destructor in the testy one?
Feb 19 2007
On Sun, 18 Feb 2007 18:44:08 -0300, Cesar Rabak wrote:sclytrack escreveu:It's the programmer responsibility in this situation. I guess you were expecting that when the main() function ended, that D would go and call the dtor of all the objects still hanging around. Unfortunately, D doesn't do that - you need to explictly do that. Try this ... ------------ import std.stdio; class Testb { this() { writefln("testb constructor"); } ~this() { writefln("testb destructor"); } } class Testy { static Testb inner = null; this() { writefln("testy constructor"); inner = new Testb(); } ~this() { writefln("testy destructor"); if (inner !is null) delete inner; } static void dtor() { if (inner !is null) delete inner; } } // Module destructor. Called when main ends. static ~this() { Testy.dtor(); } int main() { Testy t = new Testy(); return 0; } -------------- -- Derek Parnell Melbourne, Australia "Justice for David Hicks!" skype: derek.j.parnellimport std.stdio; class Testb { this() { writefln("testb constructor"); } ~this() { writefln("testb destructor"); //Doesn't output on screen. } } class Testy { static Testb inner = null; //Destructor of Testb doesn't appear to be called. this() { writefln("testy constructor"); inner = new Testb(); } ~this() { writefln("testy destructor"); } } int main() { writefln("gdc version 0.22"); Testy t = new Testy(); return 0; } It outputs the following lines: ./a.out gdc version 0.22 testy constructor testb constructor testy destructor The destructor of testb doesn't get called, before the termination of the application, or that is at least my perception.OK, is this supposed to be 'automatic' by the D language definition or a responsibility of the programmer of including an explicit call to testb destructor in the testy one?
Feb 19 2007
== Quote from Derek Parnell (derek psych.ward)'s articleThe destructor of testb doesn't get called, before the termination of the application, or that is at least my perception.OK, is this supposed to be 'automatic' by the D language definition or a responsibility of the programmer of including an explicit call to testb destructor in the testy one?It's the programmer responsibility in this situation. I guess you were expecting that when the main() function ended, that D would go and call the dtor of all the objects still hanging around. Unfortunately, D doesn't do that - you need to explictly do that.Yes, I was kind of expecting that. :-) Anyways thanks for the examples. I'm always amazed by the response time in this forum.
Feb 19 2007