当一个类下这个
class list
{
list(int i): data(i){}
int data;
shared_ptr<list> next;
}
类里有shared_ptr 变量这个变量指向跟本类型, 这个时候不用shared_ptr.
会导致循环引用
比如:
shared_ptr<list> sh1(new list());
shared_ptr<list> sh2(new list());
sh1->next = sh2;
sh2->nex = sh1;就循环引用了
书上说改成weak_ptr
class list
{
list(int i): data(i){}
int data;
weak_ptr<list> next;
}
shared_ptr<list> sh1(new list(0));
shared_ptr<list> sh2(new list(1));
sh1->next = sh2;
sh2->nex = sh1; 可以解决, 但是离开这个作用域后怎么办, 比如我要给类加个add 函数void list::add(int i)
{
shared_ptr<list> sh(new list(i));
this->next = sh;
//这样可以嘛,weak_ptr不拥有资源, 离开作用域 sh析构了, next为空了
}
这样好像没法子用了
以后碰到类里面有指向本类型的指针, 不用shared_ptr了