1

我在 SharedObject 类中有一个私有引用计数。SharedObject 是其他类的基类,例如 Window。Window 是 Editor 的基类。

当 ref 计数达到 0 时,由于调用 SharedObject::Release(),SharedObject 会自行删除。首先我们到了Editor的析构函数,这表明this指针包含m_refs == 0,但是当我们到达Window的析构函数时它突然变成了1,当我们到达SharedObject的析构函数时,它仍然是1。

我在 SharedObject::IncRef() 方法上设置了一个断点,并且在发生这种情况时它从未被调用过。

什么?

4

2 回答 2

2

在关闭优化的情况下构建,并在 m_refs 上设置内存断点。

于 2011-02-05T22:43:35.387 回答
0

似乎您在某处有内存泄漏,甚至可能在这种破坏发生之前很久。我使用 Alleyoop 来查找漏洞。可以帮忙,不碍事的。

你使用多个线程吗?也许这是由于在销毁过程中某个地方的一些原始指针被其他线程抓住了。

附带说明一下,我建议使用 boost::intrusive_ptr - 非常方便的模式,用于处理共享对象中的 addref 和释放,这有助于随之而来,但这可能不会解决你的问题,除非你的代码真的很乱;)

于 2011-02-05T23:00:57.303 回答