From: Anil M. <am...@me...> - 2003-08-29 18:21:21
|
Hi, i''ve a class that is ment to be a singleton. But the destructor is not called. I'll attach the code: Thanks, Anil Mamede |
From: Francois F. <fra...@en...> - 2003-08-29 18:34:09
|
It would be cleaner IMHO to declare the singleton instance as a global variable, or as a static data member (my prefered). And it would actually ensure you destructor is called. > -----Original Message----- > From: min...@li... > [mailto:min...@li...] On Behalf Of > Anil Mamede > Sent: Friday, August 29, 2003 20:20 > To: Mingw Mailing List > Subject: [Mingw-users] Destructor is not called > > > Hi, i''ve a class that is ment to be a singleton. But the > destructor is > not called. I'll attach the code: > > Thanks, > Anil Mamede > > |
From: Oscar F. <of...@wa...> - 2003-08-29 18:53:59
|
Anil Mamede <am...@me...> writes: > Hi, i''ve a class that is ment to be a singleton. But the destructor > is not called. I'll attach the code: [snip] > Systems::MainSystem::MainSystem() > { > if(SDL_Init(0) == -1) { > throw SYSTEMFAILURE; > } > } [snip] > Systems::MainSystem& Systems::MainSystem::getMainSystem() > { > static MainSystem system; > > return system; > } You throw an exception on the object constructor, so the object is not fully constructed and there is no need for a call to the destructor. -- Oscar |
From: Oscar F. <of...@wa...> - 2003-08-29 19:05:26
|
Anil Mamede <am...@me...> writes: > Hi, i''ve a class that is ment to be a singleton. But the destructor > is not called. I'll attach the code: Sorry, discard my previous message. It would be a good thing to post a complete, minimal test case that shows the problem. -- Oscar |
From: Greg C. <chi...@mi...> - 2003-08-29 21:41:49
|
Anil Mamede wrote: > > Hi, i''ve a class that is ment to be a singleton. > > class MainSystem { > private: > MainSystem(); > MainSystem(const MainSystem &system); You may as well declare a private, undefined assignment operator too: MainSystem& operator=(const MainSystem&); > public: > ~MainSystem(); Conforming compilers let you make the dtor private [12.4/10, 11/5]. > static MainSystem& getMainSystem(); > }; > But the destructor is not called. Your code looks like an ordinary Meyers singleton. Does the static local object ever get constructed? |
From: Anil M. <am...@me...> - 2003-08-30 08:13:46
|
Greg Chicares wrote: >Anil Mamede wrote: > > >>Hi, i''ve a class that is ment to be a singleton. >> >>class MainSystem { >>private: >> MainSystem(); >> MainSystem(const MainSystem &system); >> >> > >You may as well declare a private, undefined assignment operator too: > > MainSystem& operator=(const MainSystem&); > > > >>public: >> ~MainSystem(); >> >> > >Conforming compilers let you make the dtor private [12.4/10, 11/5]. > I made public to test if the dtor is called, but it was private. > > > >> static MainSystem& getMainSystem(); >>}; >> >> > > > >>But the destructor is not called. >> >> > >Your code looks like an ordinary Meyers singleton. >Does the static local object ever get constructed? > > Yes the ctor is called and it doesnt throw the exception. If it doesnt throw the exception, he doesnt have to call the destructor. I'll try put as a class member. > >------------------------------------------------------- >This sf.net email is sponsored by:ThinkGeek >Welcome to geek heaven. >http://thinkgeek.com/sf >_______________________________________________ >MinGW-users mailing list >Min...@li... > >You may change your MinGW Account Options or unsubscribe at: >https://lists.sourceforge.net/lists/listinfo/mingw-users > > > |