Item 13 管理在堆上new出来的对象

来源:互联网 发布:小当家水浒卡淘宝 编辑:程序博客网 时间:2024/04/25 19:32

 

创建Investment资源之后立即交给资源管理器auto_ptr,这叫Resource Acquisition Is Initialization (RAII)。
资源管理器在dtor里销毁资源。如果发生异常,会很麻烦。
不要用多个auto_ptr管理同一个资源。否则会发生多次销毁。auto_ptr本身也改装了copy动作(copy ctor和assignment operator)。

 

 

因为有着这种奇怪的拷贝行为,所以auto_ptr不能用于管理STL容器内的元素。STL容器要求,其元素必须能正常拷贝。
可使用“引用计数智能指针”:reference-counting smart pointer (RCSP)来代替auto_ptr。和垃圾收集类似,不同之外在于RCSP不能处理“循环引用”。
shared_ptr就是一种RCSP:

 

 

对于初始化,和auto_ptr没什么不同。

 

 

auto_ptr和tr1::shared_ptr都用delete来析构对象,而非delete[]。所以不能管理对象数组。但是如果误用,编译器不报错。
boost::scoped_array和boost::shared_array可管理数组对象。

原创粉丝点击