我已经实现了自己的智能指针,一切正常,直到我意识到我的实现存在致命缺陷。问题是一个对象可以有一个智能指针,它可能持有对自身的引用。如果这是一个单层问题,这个问题将很容易避免 - 很容易发生的是一个引用计数的类将间接(通过其成员之一)持有对自身的引用。这意味着一个对象永远不会被删除删除。有什么办法/方法可以解决这个问题吗?
最简单的例子:
class Derived : public Object {
public:
static ref<Object> Create() { return ref<Object>(new Derived()); }
private:
Derived() : m_ref(this) // m_ref now holds a reference to Derived instance
{
// SOME CODE HERE
}
ref<Object> m_ref;
};
Object 是包含引用计数器的基类, ref 是智能指针,包含对其分配对象的引用