为何优先选用unique_ptr而不是裸指针?

 

前言

​在《拥抱智能指针,告别内存泄露》中说到了内存泄漏问题,也提到了C++中的智能指针基本原理,今天就来说说类模板unique_ptr。
在此之前,先回答读者的一个提问:C语言中该怎么办?有几点建议:

  • 编写时尽量遵循函数内申请,函数内释放的原则

  • 注意成对编写malloc和free

  • 使用静态扫描工具,如《pclint检查

  • 使用内存检测工具,如valgrind

相关阅读《常见内存问题》。

unique_ptr

一个unique_ptr独享它指向的对象。也就是说,同时只有一个unique_ptr指向同一个对象,当这个unique_ptr被销毁时,指向的对象也随即被销毁。使用它需要包含下面的头文件

 

#include<memory>

基本使用

常见方式有:

 

std::unique_ptr<int> up;//可以指向int的unique_ptr,不过是空的
up = std::unique_ptr<int>(new int(12));

此时它是一个空的unique_ptr,即没有指向任何对象。

 

//unique_ptr<T>
std::unique_ptr<string> up1(new string("bianchengzhuji"));
std::unique_ptr<int[]> up2(new int[10]);//数组需要特别注意

也可以指向一个new出来的对象。

你也可以结合上面两种方式,如:

 

std::unique_ptr<int> up;//声明空的unique_ptr
int *p= new int(1111);
up.reset(p);//令up指

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值