`
isiqi
  • 浏览: 16049941 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

F# 
阅读更多

创建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可管理数组对象。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics