关闭

<Effective C++: 资源管理> 笔记

626人阅读 评论(0) 收藏 举报

条款13:为防止资源泄漏,请使用RAII对象,它们在构造函数中,获得资源并在析构函数中释放资源。

两个常被使用的RAII对象分别是shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它指向null。


条款14:在资源管理类中,小心copying行为。

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

普遍而常见RAII class copying行为是:抑制copying,引用计数法(类似shared_ptr),深度复制,转移资源拥有权(类似auto_ptr)。

另外,shared_ptr还可以指定所谓的“删除器”,比如在引用计数为0时,不是删除指针,而是解除锁定。


条款15:在资源管理类中,提供对原始资源的访问。

这是因为,有些API函数需要直接处理资源(指针),比如shared_ptr提供了get()方法,用以返回其保存的资源。


APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理资源”的方法。

对原始资源的访问可能经由显式转换或隐式转换。一般而言,显式转换比较安全,但隐式转换对客户比较方便。


条款16:成对使用new和delete时,要采用相同形式。


比如,new对应delete,new []对应delete []。

对于数组类型,一般不要使用typedef。


同样的道理,在C语言中,多级指针的使用时,用了多少次malloc,就要用多少次free。


条款17:以独立语句将newed对象置入智能指针。


C++对于函数参数的执行次数没有定义,所以呢,在调用函数的时候,在参数上使用new构造函数,一旦发生异常,可能会导致内存泄露。最好,在单独的语句中new出对象,再放入参数中。

0
0
查看评论

《Effective C++》资源管理:条款13-条款15

在系统中,资源是有限的,一旦用完必须归还给系统,否则可能会造成资源耗尽或其他问题。例如,动态分配的内存如果用完不释放会造成内存泄漏。 这里说的资源不仅仅是指内存,还包括其他,例如文件描述符、网络连接、数据库连接、互斥锁等。 在任何情况下都要把不使用的资源归还系统是一件非常困难的事情。尤其是考虑到异常...
  • KangRoger
  • KangRoger
  • 2015-01-14 21:46
  • 1336

《Effective C++》资源管理:条款16-条款17

在使用new和delete要注意的事项,以及使用智能指针时要注意的事项。
  • KangRoger
  • KangRoger
  • 2015-01-16 21:36
  • 1361

读书笔记_Effective C++_习惯C++

这是一本非常经典C++书籍,也是我在工作中发现自己C++上还有很多薄弱点的时候经常拿来充电的。这本书内容很多,讲了很多如何高效地使用C++的方法,有些地方自己也没能啃透,读过一遍后很多知识点容易忘记,这次是一条一条地进行温习,之所以会分享出来是觉得对于程序员来说,好记性不如烂笔头,自己多动手往往在真...
  • John_cdy
  • John_cdy
  • 2015-05-04 09:51
  • 2208

【C++】《Effective C++》读书笔记汇总

我之前边读《Effective C++》边写下每个条款的读书笔记,这一版是C++11之前的版本。这里我将每个条款令我印象深刻的点小结一下。 1、C++包括:Plain C(面向过程)、OOP(面向对象)、模板(泛型和模板元编程)、STL(C++标准库)。 2、用inline、enum、const代...
  • lpsl1882
  • lpsl1882
  • 2016-04-06 11:14
  • 2494

【Effective C++笔记】资源管理

【条款13】以对象管理资源 【条款14】在资源管理类中小心copying行为 【条款15】在资源管理类中提供对原始资源的访问 【条款16】成对使用new和delete时要采用相同形式 【条款17】以独立语句将newed对象置入智能指针
  • u013040181
  • u013040181
  • 2014-12-07 16:11
  • 410

《Effective Modern C++》读书笔记

Tags: c++ Note:为避免各种侵权问题,本文并没有复制原书任意文字(代码除外,作者已经声明代码可以被使用)。需要原书完整中文翻译的读者请等待官方译本的发布。 正文 为了让本文更加清晰,依然还是用条款的形式来介绍知识点。(但不能保证我写的条款就是原书的条款) ...
  • haluoluo211
  • haluoluo211
  • 2017-01-19 17:55
  • 815

Effective Modern C++笔记汇总

Effective Modern C++ 目录Item 1: Understand template type deduction….待续
  • zhangyifei216
  • zhangyifei216
  • 2017-06-05 16:09
  • 2174

Effective C++笔记: 资源管理(一)

条款13:以对象来管理资源为了确保资源总能被释放,我们需要将资源放入一个类中,这个类的析构函数在控制流程离开其作用域的时候会自动释放资源。 std::auto_ptr:注意:当一个 auto_ptr 被销毁的时候,会自动删除它所指向的东西,所以不要让超过一个的 auto_ptr 指向同一个...
  • qin529
  • qin529
  • 2009-07-10 18:04
  • 428

Effective C++笔记: 资源管理(二)

 Item 16: 使用相同形式的 new 和 deletenew对应delete,new [] 对应 delete[]这个规则对于有 typedef 倾向的人也很值得注目,因为这意味着一个 typedef 的作者必须在文档中记录:当用 new 生成一个 typedef 类型的对象时,应该...
  • qin529
  • qin529
  • 2009-07-10 18:36
  • 331

Effective C++笔记(6)—资源管理

EffectiveC++之资源管理
  • zhangxiao93
  • zhangxiao93
  • 2017-07-02 20:40
  • 165
    个人资料
    • 访问:604288次
    • 积分:7751
    • 等级:
    • 排名:第3263名
    • 原创:192篇
    • 转载:6篇
    • 译文:0篇
    • 评论:99条
    博客专栏
    文章分类
    最新评论