愚公移山

死而后已

C++博客 首页 新随笔 联系 聚合 管理
  1 Posts :: 11 Stories :: 0 Comments :: 0 Trackbacks

Effective C++读书笔记

--By Nathan.Yu 2007-11-28--

3 资源管理(之二)

条款14:在资源管理类中小心copying行为(Think carefully about copying behavior in resource-managing classes

 当一个RAII对象被复制时,会发生什么?”这是每个RAII class作者必须面对的一般化问题。有4中可能:

1、  禁止复制。(见条款6 Uncopyable类)

2、  对底层资源祭出“引用计数”(reference-count)。通常只要内含一个tr1::shared_ptr成员变量,RAII class便可实现出referenct-counting copying行为。即将成员T*改为tr1::shared_ptr<T>

tr1::shared_ptr的缺省行为是“当引用次数为0时删除所指对象”。但tr1::shared_ptr允许指定“删除器”(deleter)——是一个函数或函数对象(function object),当引用次数为0时被调用。“删除器”(deleter)作为tr1::shared_ptr构造函数的第二个参数传入。

3、  复制底部资源。——“深度拷贝”,比如字符串类,当复制发生时,不论指针或指针所指内存都要被复制。

4、  转移底部资源的拥有权。如auto_ptr

 

请记住

1、             复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。

2、             普遍而常见的RAII class copying行为是:抑制copying、施行引用计数法。不过其他行为也都可能被实现。

posted on 2007-11-29 00:43 Nathan.Yu 阅读(103) 评论(0)  编辑 收藏 引用 所属分类: Effective C++(3E)读书笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理