智能指针

1、auto_ptr的意义

std::auto_ptr是C++标准库里面的模板库,属于智能指针。当系统异常退出的时候避免资源泄露(内存)。其他的资源还对应其他的智能指针。

2、auto_ptr的使用

std::auto_ptrtest(new int(1));

test将是一个auto_ptr的对象,使用一个int指针进行初始化。

test可以象其他指针一样使用,如使用*使用->但是++不可以使用,以后也许会扩展,其实难对++做越界管理,也许可以放弃一些速度。

当使用auto_ptr的时候,必须使用显示的类型转化来初始化,如auto_ptra(new classA)

而不能使用auto_ptr a=new classA;

3、auto_ptr所有权的转移

auto_ptr对所有所有权有严格的约定,一个auto_ptr只能控制一个指针,不能控制多个,当auto_ptr拥有一个指针的时候就不能在拥有其他的指针了。同时,不同的auto_ptr不能拥有同一个指针。


智能指针实质上是一个栈对象,而并非指针类型。C++的auto_ptr的作用是动态分配对象以及当对象不再需要时自动执行清理。

使用std::auto_ptr,要#include

(1)尽量不要使用“operator=”(如果使用了,请不要在使用先前对象)。

(2)记住release()函数不会释放对象,仅仅归还所有权。

(3)std::auto_ptr最好不要当成参数传递(读者可以自行写代码确定为什么不能)。

(4)auto_ptr存储的指针应该为NULL或者指向动态分配的内存块。

(5)auto_ptr存储的指针应该指向单一物件(是new出来的,而不是new[]出来的)。auto_ptr不能指向数组,因为auto_ptr在析构的时候只是调用delete,而数组应该要调用delete[]。

(6)auto_ptr作为成员变量,以避免资源泄露。

(7)auto_ptr不能共享所有权,即不要让两个auto_ptr指向同一个对象。

(8)auto_ptr不能作为容器对象,STL容器中的元素经常要支持拷贝,赋值等操作,在这过程中auto_ptr会传递所有权,那么source与sink元素之间就不等价了。

你可能感兴趣的:(面试,笔试,智能指针)