A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

阅读数:641


条款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 个回复

您需要登录后才可以回帖 登录 | 加入黑马