条款13:以对象管理资源
- 为了防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放
这里的RAII 对象是有关c++智能指针, unique_ptr shared_ptr weak_ptr 。尽量使用他们。
对应的用法请查看你的c++书籍。防止程序中 没有delete 对象造成的类存泄漏。
条款14:以资源管理类中小心 Coping 行为
- 复制RAII 对象必须要复制它所管理的资源。
- 普遍常见的RAII class coping 行为是:抑制coping,实施引用计数法
实施应用计数法的时候,使用shared_ptr 来替换 shared_ptr <class> name;
条款15:在资源管理类中提供对原始资源的访问
- APIs往往要求访问原始资源,所以每一个RAII class应提供一个“取得其管理的资源” 的办法
- 对原始数据的访问可能经由显示转换或隐示转换。一般显示转换比较安全,隐示转换对客户比较方便
一个简单的例子:
我们喜欢用智能指针,std::shared_ptr <Investment> pInv(CreateInvestmemt());
有个函数 int daysHeld(const Investment * pi);
这个时候你该如果处理呢?
pInv.at();可以返回对应的class 指针类型。
所以使用 int day = daysHeld(pInv.at());
便可以处理数据, 有关显示隐示,这里就不再多说了。