如果类的定义如下,则以下代码正确并且是良好编程风格的是:
class Object { public: virtual ~Object() {} //… };
(2)记住release()函数不会释放对象,仅仅归还所有权。
(3)std::auto_ptr最好不要当成参数传递(读者可以自行写代码确定为什么不能)。
(4)auto_ptr存储的指针应该为NULL或者指向动态分配的内存块。
(5)auto_ptr存储的指针应该指向单一物件(是new出来的,而不是new[]出来的)。auto_ptr不能指向数组,因为auto_ptr在析构的时候只是调用delete,而数组应该要调用delete[]。
auto_ptr是一个模板类,定义如下:
template <typename Type>
class auto_ptr {...};
它存储的是一个指向Type的指针。
2 auto_ptr的使用
std::auto_ptr<int> test(new int(1));
test将是一个auto_ptr的对象,使用一个int指针进行初始化。
test可以象其他指针一样使用,如使用* 使用->但是++不可以使用,以后也许会扩展,其实难对++做越界管理,也许可以放弃一些速度。
当使用auto_ptr的时候,必须使用显式的类型转化来初始化,如auto_ptr<classA> a(new classA)
而不能使用auto_ptr<classA> a = new classA;
3 auto_ptr所有权的转移
auto_ptr对所有权有严格的约定,一个auto_ptr只能控制一个指针,不能控制多个,当auto_ptr拥有一个指针的时候就不能在拥有其他的指针了。同时,不同的auto_ptr不能拥有同一个指针。