C++智能指针

C++中有auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针。

智能指针的主要作用是管理堆内存。因为在C++中,堆内存由程序员手动释放,那有时候可能会出现程序员忘记释放的这一种情况,智能指针就是为了防止这种情况出现的,它的作用是自动化的管理我们的堆内存。

1.auto_ptr

auto_ptr是在C++98中引进的一个概念,那它在C++11中是已经被废弃了。

原因是使用auto_ptr可能会造成和我们的浅拷贝相似的问题:同一块内存的重复释放,导致程序崩溃。

2.unique_ptr

unique_ptr的核心思想是:它持有一个对象的唯一所有权,即不能有两个指针指向同一个对象。

那么这个核心思想如何体现呢?

1.unique_ptr禁止拷贝构造,禁用拷贝构造函数和赋值运算符

2.支持移动语义,可以将唯一对象的所有权转移给另外一个指针

3.shared_ptr

shared_ptr就和它的名字一样,它的核心思想是共享所有权,即多个shared_ptr可以指向同一个对象。

它的内部维护了一个引用计数器,每当我们将一个shared_ptr指向同一个对象时,引用计数器+1,指针每析构一次,引用计数器-1,当我们的引用计数器归零时,会自动释放所指对象的内存。

shared_ptr不像unique_ptr,它是支持拷贝构造的

shared_ptr是线程安全的吗?
shared_ptr的引用次数加减操作内部自动加锁解锁,是线程安全的。但是指向对象的指针不是线程安全的,所以对象的读取需要加锁
一、使用智能指针访问资源不是线程安全的,需要手动加锁解锁。
二、智能指针的拷贝也不是线程安全的

4.weak_ptr

weak_ptr的作用呢主要是通过和shared_ptr配合,解决shared_ptr中的循环引用的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值