您的位置:首页 > 产品设计 > UI/UE

智能指针: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: