我在SharedObject类中有一个私有引用计数。 SharedObject是其他类的基类,例如Window。 Window是Editor的基类。
当ref count达到0时,由于调用SharedObject :: Release(),SharedObject会自行删除。首先我们进入编辑器析构函数,它显示this指针包含m_refs == 0,但是当我们到达Window析构函数时它突然变为1,当我们到达SharedObject析构函数时,它仍然是1。
我在SharedObject :: IncRef()方法上放置了一个断点,并且在发生这种情况时从未调用它。
什么?
答案 0 :(得分:2)
关闭优化构建,并在m_refs上设置内存断点。
答案 1 :(得分:0)
好像你在某个地方有内存泄漏,甚至可能在此次破坏发生之前很久。我使用Alleyoop来发现泄漏。可以帮助,不会因此而受伤。
你使用多线程吗?也许是因为某些原始指针在某个地方被其他线程在破坏期间抓住了。
另外,我建议使用boost :: intrusive_ptr - 非常方便的模式来处理共享对象中的addrefs和release,这有助于解决它,但这可能无法解决你的问题,除非你有一个真正的混乱在你的代码中;)