用于将weak_ptr应用于unique_ptr的内容

Ver*_*gon 4 c++ boost memory-leaks memory-management c++11

我想了解unique_ptr,shared_ptrweak_ptr中随附C++ 11.

我听说这weak_ptr对于缓存,打破周期等等都会很好.我听说他们合作得很好shared_ptrs.

但在这方面,shared_ptrs和之间的区别是unique_ptrs什么?为什么weak_ptr只能与一个而不是另一个一起使用?为什么我不想对其他人拥有的东西进行弱引用?

Che*_*Alf 7

weak_ptr技术上讲,A 是一种挂起shared_ptr管理某个共享对象的一组s 的引用计数器的方法.当最后一个shared_ptr被摧毁时,对象被摧毁,但只要它有weak_ptrs,它的引用计数器就会存在.因此,通过任何仍然weak_ptr存在,您可以检查对象是否仍然存在,或已被销毁.

如果它仍然存在,那么从weak_ptr你可以获得一个shared_ptr让你引用该对象.

这主要用于打破周期.

特别是,对象可以包含weak_ptr对其自己的引用计数器的保持,这允许您shared_ptr从对象本身获取对象.也就是说,a shared_ptr使用与shared_ptr此对象相同的参考计数器.哪个是enable_shared_from_this有效的.

unique_ptr 没有任何引用计数器,因此挂起那个不存在的引用计数器是没有意义的.

  • "*这主要用于打破周期.*"我不同意这一点.`weak_ptr`的主要用途是访问您不需要拥有的对象,但是当您不查看它时可能会被删除.有一个概念,即对象可能存在,也可能不存在,您必须检查. (8认同)