Effective C++学习笔记(三)
资源管理
条款十三 以对象管理资源,防止资源泄漏,使用RAII管理资源,使用智能指针shared_ptr
-
为防止资源泄漏,使用RAII(resource Acquisition Is Initialization)对象,在构造函数中获得资源并在析构函数中释放资源。
-
两个常被使用的RAII class分别是shared_ptr和unique_ptr(auto_ptr已经废弃)。
条款十四 在资源管理类中,小心copy的行为
-
复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。
-
普遍而常见的RAII class copying行为是:抑制copying、使用引用计数法。不过其他行为也都可能被实现。
条款十五 在资源管理类中,提供对原始资源的访问。
-
每一个RAII class应该提供一个“取得其所管理之资源”的办法。
-
对原始资源的访问可能经由显式转换或隐式转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。
class Font{
operator FontHandle() const //隐式转换函数,容易带来危险。
{return f;}
FontHandle get() const //显式转换函数
{return f;}
};
条款十六 成对使用new和delete,并采用相同的形式
- new [] ,delete []; new ,delete.
条款十七 以独立语句将newed对象置入智能指针
- 以独立语句将newed对象置入智能指针内,如果不这样做,一旦new的时候抛异常,有可能导致难以察觉的资源泄漏。