智能指针:unique_ptr、shared_ptr、weak_ptr

智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。

一、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

你可能感兴趣的:(智能指针:unique_ptr、shared_ptr、weak_ptr)