条款13 以对象管理资源
- 在构造函数中获得资源并在析构函数中释放资源。
shared_ptr<Investment> pInv(createInvestment())
- shared_ptr和auto_ptr的区别在于, auto_ptr只有一个指针指向对象,另一个将变为null
auto_ptr<Investment> pInv1(createment());
auto_ptr<Investment> pInv2(pInv1);// pInv2指向对象,pInv1变成Null
条款14 在资源管理类中小心copying行为
- 复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。
条款15 在资源管理类中提供对原始资源的访问
对原始资源的访问:显示转换比较安全,隐式转换对客户比较方便。
class Font{
public:
...
FrontHandle get() const {return f;}
...
};
后面需要使用API时调用get(),明白的将Font转换为FontHandle
changeFontSize(f.get(),newFontSize);
条款16 成对使用new和delete时要采用相同形式
如果new使用了[],必须在相应的delete表达式中也使用[]。
条款17 以独立语句将newed对象置入智能指针
shared_ptr<Widget> pw(new Widget);// 创建Widge
processWidget(pw,priority);// 将它置于智能指针内,然后再把那个智能指针传给processWidget