2011-02-05 30 views
1

我在类SharedObject中有一个私有引用计数。 SharedObject是其他类的基类,例如Window。 Window是编辑器的基类。C++参考计数更改同时破坏对象

当ref计数达到0时,由于调用SharedObject :: Release(),SharedObject会自行删除。首先我们进入编辑器析构函数,它显示这个指针包含m_refs == 0,但是当我们到达Window析构函数时它突然变为1,并且当我们到达SharedObject析构函数时,它仍然是1.

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

什么?

+3

你能提供更多的代码和更多的上下文?单从你的描述来看,几乎不可能回答这个问题。 – templatetypedef 2011-02-05 22:34:36

+0

确保IncRef未内联,禁用断点。 – 2011-02-05 22:39:16

+0

IncRef未内联,断点工作。但是当编辑器被破坏时,函数不会中断,所以我猜它没有被调用。 – Xilliah 2011-02-05 22:58:46

回答

2

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

0

好像你有内存泄漏的地方,甚至在这种破坏发生之前。我使用Alleyoop发现泄漏。可以帮助,不会伤害到那种方式。

你使用多线程吗?也许这是由于某些原始指针被破坏时被其他线程抓住了。

在附注中,我推荐使用boost :: intrusive_ptr - 非常方便的模式来处理共享对象中的addrefs和release,这有助于随之发生,但这可能无法解决您的问题,除非您有一个真实在你的代码混乱;)