条款13
以对象管理资源
资源获得时机便是初始化时机 RAII
引用计数
智能指针无法运用于数组
条款14
在资源管理器类中小心copying行为
方案1:对于一个mutex我们希望禁止复制
方案2:对底层资源进行引用计数
shared_ptr指定删除器,当引用次数为0时被调用
class Lock
{
public:
explicit Lock(Mutex * pm):mutexptr(pm,unlock)
{
lock(mutexptr.get());
}
private:
std::tr1::shared_ptr<Mutex> mutexptr;
};
方案三:复制底部资源,深度拷贝
方案四:转移底部资源拥有权
条款15
在资源管理类中提供对原始资源访问
显示:
get()
->/*
隐式:
operator Fonthandle() const
{return f;}
条款16
成对使用new和delete是采用相同形式
tpyedef std::string Addresslines[4];
std::string * pal = new AddressLines;
delete[]pal;//这里addresslines是一个数组。
条款17
以独立语句将newed对象置于智能指针
process(std::tr1::shared_ptr<Widget>(new widget),priority())
可能会造成泄漏资源,调用process之前做三件事:
调用priority
执行new widget
调用shared_ptr
但三者顺序不定,不同编译器不一致
如果
执行new widget
调用priority
调用shared_ptr
而调用priority出现异常,widget未加入shared_ptr