【发布时间】:2010-09-22 05:45:15
【问题描述】:
我正在开发一个 C++ 应用程序,该应用程序内部有一些定期创建和销毁的控制器对象(使用新的)。这些控制器必须将自己注册到另一个对象(我们称之为controllerSupervisor),并在它们被破坏时取消注册。
我现在面临的问题是在我退出应用程序时发生的:由于破坏顺序不是确定性的,因此单个 controllerSupervisor 实例在(某些)控制器本身之前被破坏,并且当他们调用在他们的析构函数中取消注册方法,他们在一个已经被破坏的对象上这样做。
到目前为止,我提出的唯一想法(感冒了,所以这可能没什么意义)不是将 controllerSupervisor 作为全局变量放在堆栈上,而是放在堆上(即使用 new)。但是在那种情况下,我没有删除它的地方(这都在第 3 方类型的库中)。
任何关于可能选项的提示/建议将不胜感激。
【问题讨论】:
-
“第三方库”是指你不写“main”吗?
-
表示controller和supervisor的代码在一个静态链接库中。监督者在这个库之外是不可见的,但控制器是由应用程序创建的。
-
如果你创建了控制器,那么你可以控制它们的销毁,不是吗?
-
@Null303,我可以销毁它们,但如果例如我有“对象 x;” x.controller 在 x 的析构函数中被销毁,我无法确定是先销毁主管还是 x。
标签: c++ destructor