c++中weak_ptr到底是干什么用的?

如题,看得我稀里糊涂还看不懂。c++第五版。

按照我的理解,weak_ptr只能跟踪一个共享的资源,但并不实际拥有,也不会阻碍资源被释放
读取共享的资源前需要执行lock,得到shared_ptr之后才能访问追问

那发明它是为了做啥呢?就是在啥情况会用啊?我就是要个很容易理解的概念,不然好难理解

追答

当两个对象需要互相引用的时候,我们总希望其中一个对象拥有另外一个对象的强引用,而另外一个对象拥有自己的弱引用

如果两个对象都是强引用,则容易引起循环引用,导致两个对象都无法正确释放

追问

我好像有点理解了,能再说的具体一点不?比如说呢?一个强引用一个弱引用会发生什么呢?

追答

假如A拥有B的强引用,B拥有A的弱引用
那么A被析构的时候,B的计数器会减1,有可能导致B的析构
但是B无法在A之前被析构,因为A拥有B的强引用

举个例子
汽车A应该拥有引擎B的强引用,引擎B应该拥有汽车A的弱引用
因为当汽车A报废的时候,引擎B应该被自动析构,除非引擎B也被其他汽车C使用着
但是引擎B不应该被析构,因为汽车A正使用着他

但是引擎B不应该拥有对汽车A的强引用,因为引擎B拥有汽车A的强引用的话,即便不再有人拥有这辆汽车A,但是因为引擎B对汽车A的强引用,导致汽车A在“被使用者”,所以汽车A和引擎B形成循环引用,两者均无法正确被释放

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-20
  weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*和->但可以使用lock获得一个可用的shared_ptr对象。
  weak_ptr的一个重要用途是通过lock获得this指针的shared_ptr,使对象自己能够生产shared_ptr来管理自己,但助手类enable_shared_from_this的shared_from_this会返回this的shared_ptr,只需要让想被shared_ptr管理的类从它继承即可。
相似回答