智能指针: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):

shared_ptr:

stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值