转载:
https://www.cnblogs.com/wangkeqin/p/9383658.html
https://www.cnblogs.com/wangkeqin/p/9351191.html
https://www.cnblogs.com/DswCnblog/p/5628314.html
C++11中的unique_ptr、shared_ptr、weak_ptr非常重要,但是你要完全掌握需要时间和一定的内功。所以我经常翻阅以上三篇文章。简洁有案例,非常好。
本想自己写文档,但是有这么好的文章,就不需要班门弄虎了。稍加整理,把常见使用函数贴出来。
一、C++内存管理之unique_ptr
二、C++内存管理之shared_ptr
三、C++ 11 创建和使用共享 weak_ptr
weak_ptr是为了配合shared_ptr而引入的一种智能指针,
它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,
也就是将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。
不论是否有weak_ptr指向,一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。
从这个角度看,weak_ptr更像是shared_ptr的一个助手而不是智能指针。
最重要的是搞清楚以下三句话:
std::shared_ptr<int> sPtr(new int(5));
std::weak_ptr<int> wPtr = sPtr; //weak_ptr不会改变shared_ptr,但是会和shared_ptr的引用保持一致
std::shared_ptr<int> sPtr2 = wPtr.lock(); //wPtr.lock()后会改变shared_ptr的引用计数(+1)