`
nathan09
  • 浏览: 144655 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

【读书笔记】Effective C++—3 资源管理(之2)

 
阅读更多

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、施行引用计数法。不过其他行为也都可能被实现。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics