以对象管理资源的两个关键:
- 获得资源后立即放进管理对象内。该观念常被称为RAII(资源获取时便初始化)
- 管理对象运用析构函数确保资源被释放。
auto_ptr弊端:一旦发生复制,被复制的auto_ptr就会被设为null(受auto_ptrs管理的资源绝对没有一个以上的auto_ptr同时指向它),STL容器容不得auto_ptr。
好的替代方案:
shared_ptr(引用计数型智能指针),持续追踪有多少对象指向某笔资源,无人指向它时自动删除该资源。良好地支持copy行为。
弊端:无法打破环状引用,两个已经没被使用的对象彼此互指,好像还处在“被使用”状态。
auto_ptr和shared_ptr不能使用在C++动态分配数组上(编译不会报错)。
工厂函数返回原始指针极易引起资源泄漏,不建议。(条款18)