一、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)