以后碰到类里面有指向本类型的指针,不用shared_ptr了,,shared_prt 循环引用是个问题 有些情况下用起来麻烦

当一个类下这个

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了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值