智能指针:unique_ptr、shared_ptr、weak_ptr
2018-03-12 10:22
218 查看
智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。
一、auto_ptr:这是一个被c++11标准废弃的一个智能指针,unique_ptr可以看做是替代品。
二、shared_ptr:shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,删除所指向的堆内存。shared_ptr内部的引用计数是安全的,但是对象的读取需要加锁;一旦将一个new表达式返回指针交给shared_ptr管理后,就不要再通过普通内存访问这块内存;可以通过reset方法重置指向另一个对象,此时原对象引用计数减一;
三、unique_ptr:unique_ptr对于所指向的对象,正如其名字所示,是 独占 的。所以,不可以对unique_ptr进行拷贝、赋值等操作,但是可以通过release函数在unique_ptr之间转移控制权;unique_ptr可以作为函数的返回值和参数使用,这时虽然也有隐含的拷贝存在,但是并非不可行的。
四、weak_ptr:通常和shared_ptr搭配使用,通过lock()函数获取shared_ptr指针;可以指向shared_ptr对象,但是不增加引用计数;
参考链接:C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr):http://www.jb51.net/article/90044.htm
shared_ptr:https://www.cnblogs.com/jiayayao/archive/2016/12/03/6128877.html
stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结:http://blog.csdn.net/zsc_976529378/article/details/52250597
一、auto_ptr:这是一个被c++11标准废弃的一个智能指针,unique_ptr可以看做是替代品。
二、shared_ptr:shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,删除所指向的堆内存。shared_ptr内部的引用计数是安全的,但是对象的读取需要加锁;一旦将一个new表达式返回指针交给shared_ptr管理后,就不要再通过普通内存访问这块内存;可以通过reset方法重置指向另一个对象,此时原对象引用计数减一;
三、unique_ptr:unique_ptr对于所指向的对象,正如其名字所示,是 独占 的。所以,不可以对unique_ptr进行拷贝、赋值等操作,但是可以通过release函数在unique_ptr之间转移控制权;unique_ptr可以作为函数的返回值和参数使用,这时虽然也有隐含的拷贝存在,但是并非不可行的。
四、weak_ptr:通常和shared_ptr搭配使用,通过lock()函数获取shared_ptr指针;可以指向shared_ptr对象,但是不增加引用计数;
参考链接:C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr):http://www.jb51.net/article/90044.htm
shared_ptr:https://www.cnblogs.com/jiayayao/archive/2016/12/03/6128877.html
stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结:http://blog.csdn.net/zsc_976529378/article/details/52250597
相关文章推荐
- C++ 智能指针shared-ptr,unique_ptr和weak-ptr
- C++中的智能指针——auto_ptr, unique_ptr, shared_ptr和weak_ptr
- C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
- stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
- c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
- C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
- C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
- C++14 智能指针unique_ptr、shared_ptr、weak_ptr
- C++ 智能指针 shared_ptr unique_ptr weak_ptr
- stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
- auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解
- C++11 智能指针std::shared_ptr/std::unique_ptr/std::weak_ptr
- C++ 智能指针(shared_ptr/weak_ptr)源码分析
- C++总结8——shared_ptr和weak_ptr智能指针
- [置顶] 从零开始学C++之boost库(一):详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)
- C++智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> )
- C++智能指针 shared_ptr 与 weak_ptr 原理
- Boost智能指针——scoped_ptr、shared_ptr、weak_ptr、intrusive_ptr
- shared_ptr和weak_ptr智能指针结合使用的一个实例
- C++:智能指针-TR1的shared_ptr和weak_ptr使用介绍