auto_ptr智能指针使用与局限性

auto_ptr就是智能指针,它其实是一个类类型,定义在<memory>库中,具体定义可以看这篇:auto_ptr智能指针头文件

下面写段使用auto_ptr智能指针的代码,让大家更容易理解auto_ptr如何使用。

普通指针与auto_ptr智能指针使用比较结果:

可以看出用普通指针new的对象没有调用delete释放,就不会调用A类中的析构函数,从而造成内存泄漏。而用智能指针auto_ptr就不用调用delete,它自己离开作用域后会调用A类中的析构函数。

从上面代码大家看到了,通过auto_ptr智能指针让程序有了自动“垃圾回收”的功能。但其实不然,auto_ptr并没有哪么完美,它有以下几点局限性:

1.两个auto_prt指针不能指向同一个内存:

看到结果析构了两次,其时只有一个对象pa,程序很可能会崩溃。

2.不要将auto_prt对象作为STL容器的元素,C++标准明确禁止这样做。

3.不能将数组作为auto_ptr的参数

可以看出给auto_ptr一个指针,它是无法判断出来它是否指向的是数组,只会认为是单个对象,而造成了只调用析构函数一次,造成内存泄漏。

注:auto_ptr智能指针控制的就是一个由new分配的单对象指针,并没有想像的哪么高级。

《auto_ptr智能指针使用与局限性》上有28条评论

评论已关闭。