-9

这是一个例子:

template<typename T>
struct smart { //Smart Pointer class
    smart();
    ~smart();
    smart(const smart& copy);
    T* target;
    int count;
};

struct atest {
    smart<atest> next;
};

void Garbage() {
    smart_ptr<atest> Test=smart<atest>(new atest);
//Test.count == 1
    Test->next=Test;
//Test.count == 2
//Test.target == Test->next.target
}
//Test.count == 1
//Test'll never be deleted! because it contains itself.

int main() {
    for (int i=0;i<10000000;i++) {
        Garbage();
    }
}

有一个解决方法可以在方法结束Test后删除自己吗?Garbage这是另一个问题,智能指针中还有另一个漏洞吗?

4

1 回答 1

2

你的问题很模糊,但我认为这是关于循环引用,你应该使用“弱”智能指针以避免这种情况。您可以在此处阅读有关如何使用weak_ptr 打破循环的更多信息。

于 2012-09-05T11:46:42.483 回答