【发布时间】:2011-11-20 15:55:49
【问题描述】:
我有一个全局单例,我的程序中的许多对象都在使用它。当程序关闭时,这会导致崩溃 - 它用于某些对象的析构函数中,在单例本身已被程序结束破坏之后。是否有一种可移植的方式来判断指针是否已调用“删除”?就我而言,delete 似乎将指针的值更改为 (void*)(-1),但我不知道这是否可移植。
【问题讨论】:
-
不,没有,你也不应该。查找“单例反模式”和“静态初始化地狱”。
-
delete不应更改指针的值。 -
很可能是在调试版本中
-
除了手动销毁程序的其余部分并让
C运行时仅销毁单例之外,您还应该重构以避免以这种方式使用单例。从析构函数调用单例似乎是错误的,如果您完全使用单例(我个人认为无需成为希特勒就可以做到这一点),请在对象的生命周期内调用其方法,而不是在最后。一个对象在被销毁时不应依赖于另一个对象的存在。 -
如何解决破坏顺序问题请看这里:stackoverflow.com/questions/335369/…
标签: c++