C++auto_ptr的用法

7 篇文章 0 订阅

一、auto_ptr是什么?

auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者。当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有的动态内存自动释放。即使发生异常,通过异常的栈展开过程也能将动态内存释放。auto_ptr不支持new 数组。

二、auto_ptr需要包含的头文件?

#include <memory>

三、auto_ptr用法:

auto_ptr<类型〉变量名(new类型)
例如:

auto_ptr<string> str(new string("我要成为大牛"));

尖括号里面的string用了初始化它的模板成员_Ty的类型。那么这里面,只要auto_ptr对象存在,它指向的字符串就存在,同理,如果auto_ptr对象不存在,会利用auto_ptr类中的析构函数自动销毁它所指向的字符串,也就避免了内存泄露。

auto_ptr是C++98标准库中的智能指针模板类 ,在C++11已经被废除, 可以用unique_ptr取代,功能上是相同的,unique_ptr较auto_ptr 而言,提升了安全性(没有浅拷贝),增加了特性(delete析构)和对数组的支持。

常用成员函数:

get函数:
返回智能指针指向对象的指针.
reset函数:
reset重置智能指针托管的内存地址,如果地址不一致,原来的会被析构掉
realease函数:
realease实现的功能就是将原智能指针的控制权取消,不释放原始指针.

使用建议:

1.尽可能不要将auto_ptr变量定义为全局变量或指针
2.除非自己知道后果,不要把auto_ptr智能指针赋值给同类型的另外一个智能指针
3.auto_ptr不支持容器。
4.auto_ptr的析构函数调用的是delete不是delete [],所以不能使用智能指针数组。
判断一个auto_ptr是否为空不能使用if(ptest == NULL),应该使用if(ptest.get() == NULL)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值