智能指针使用陷阱

智能指针使用陷阱

1、不能把一个原生指针交给多个智能指针管理

int *x = new int(10);
unique_ptr<int> up1(x);
unique_ptr<int> up2(x);
//警告! 以上代码使 up1 up2 指向同一个内存,非常危险,如果up1被释放,up2就指向空地址
或以下形式:
up1.reset(x);
up2.reset(x);

2、使用 u.release()的返回值

在调用 u.release()时是不会释放 u 所指的内存的,这时返回值就是对这块内存的唯一索引,如果没有使用这个返回值释放内存或是保存起来,这块内存就泄漏了

3、禁止 delete 智能指针 get 函数返回的指针

如果我们主动释放掉 get 函数获得的指针,那么智能 指针内部的指针就变成野指针了,析构时造成重复释放,带来严重后果!

4、禁止用任何类型智能指针 get 函数返回的指针去初始化另外一个智能指针

shared_ptr<int> sp1(new int(10));
//一个典型的错误用法 shared_ptr<int> sp4(sp1.get());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值