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

标签: c++raiideleteclassapinull
570人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:582102次
    • 积分:6992
    • 等级:
    • 排名:第3405名
    • 原创:165篇
    • 转载:6篇
    • 译文:0篇
    • 评论:95条
    我的推荐
    博客专栏
    最新评论