在破坏对象时C ++引用计数的变化

时间:2011-02-05 22:32:56

标签: c++ pointers undefined shared ref

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

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

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

什么?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

好像你在某个地方有内存泄漏,甚至可能在此次破坏发生之前很久。我使用Alleyoop来发现泄漏。可以帮助,不会因此而受伤。

你使用多线程吗?也许是因为某些原始指针在某个地方被其他线程在破坏期间抓住了。

另外,我建议使用boost :: intrusive_ptr - 非常方便的模式来处理共享对象中的addrefs和release,这有助于解决它,但这可能无法解决你的问题,除非你有一个真正的混乱在你的代码中;)