c++智能指针(五)之weak_ptr

来源:互联网 发布:c语言char转int 编辑:程序博客网 时间:2024/06/01 18:55

weak_ptr

weak_ptr是一种不控制所指向对象的生存期的智能指针,它指向由一个shared_ptr所管理的对象。将一个weak_ptr绑定到shared_ptr上面不会改变shared_ptr的引用计数。
一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。

创建

auto p = make_shared<int>(42);weak_ptr<int>q(p);//q弱共享p,p的引用计数不会改变

访问

由于对象可能不存在,我们不能使用weak_ptr直接访问对象,而必须调用lock。

    if (shared_ptr<int> np = q.lock()){//如果np不为空则条件成立        //在if中,np与p共享对象    }

weak_ptr与循环引用

struct A{  std::shared_ptr<A> ptr;};void main(){  std::shared_ptr<A> x=std::make_shared<A>();  std::shared_ptr<A> y=std::make_shared<A>();  x->ptr = y; // 这还不算是循环引用  y->ptr = x; // 现在算是循环引用了, x使y保持存活y使x保持存活。他们两个的计数至少为1,永远不会变成0。}

这个时候,只需要把其中一个shared_ptr改成weak_ptr就可以解决这个问题了。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 异端的权利 黑巫师和异端裁判者 异端高达红色机红龙形态 高达seed异端 异端教条 鲲之鱼 恩典福音为什么是异端 异类 异类韩漫 异类图片 异类骑士 异类大明星 韩漫异类 异类歌词 异类吉他谱 同为异类 异类歌曲 异类觉醒 一切异类都超鬼 异类逢魔时王 一切异类都超鬼 浪漫青蛙 异类之两生妖 异类之行走的古堡 异类大明星 剩斗士 大唐山门异类 鹤蛇散人 异类在线阅读 逢魔时王 yilei 异能小娇妻 末世异能 异能娇妻 假装会异能 异能小娘子 异能 都市异能 异能高手 属性异能 超强异能 超级异能 七零异能小娇妻 异能小神农张家三叔 末世之异能觉醒