这是一个例子:
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
这是另一个问题,智能指针中还有另一个漏洞吗?