智能指针复习

auto_ptr

int *pint=new int (10);

auto_ptr<int>ap (pint);

1可以托管一段堆空间

2进行复制时有缺陷 :auto_ptr<int>ap2(ap),此时会将ap的数据成员置为空

原因:auto_ptr的拷贝函数列表初始化时使用release()函数将传进来的对象置空。

unique_ptr

1不允许进行复制或者赋值操作,独享对象所有权。没有了auto_ptr的缺陷

2具有移动语义(std::move),可以作为容器元素。vector<unique_ptr<int>>vec;

进行传值时使用std::move,就不会执行拷贝操作。参数是显式调用构造函数产生的临时对象是也可以作为容器右值。

原因:从源码可以看出unique_ptr具有移动构造函数和移动赋值运算符函数。

shared_ptr

1支持复制拷贝,但是浅拷贝,用的是引用计数,不同指针指向同一片堆空间时,把数目记录下来。

2 uniqe_ptr使用的一般shared_ptr也可以使用

3具有移动语义,可以复制赋值

缺点:循环引用,强引用,++操作。解决:赋值复制时不进行++

weak_ptr

1引用计数不会++;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值