条款13:RAII资源管理
以对象管理资源,类定义时以构造函数申请资源,析构函数释放资源。将资源的申请封装到类内部。
//heap区域被auto_ptr管理。类指针的对象 pointerlike对象。智能指针
/*注:
auto_ptr的常见误用:1.auto_ptr被销毁时自动删除它所指向的区域,注意不能让多个auto_ptr同时指向同一个对象。否则可能会出现对象被删除多次这是十分危险的 2.auto_ptr copy或者copy assignment使得原有NULL,复制所得的指针接管原有资源的所有权。
*/
结论:
1.为了防止资源泄漏,请使用RAII思想
2.shared_ptr往往比auto_ptr更加广泛的使用
条款14:RAII对象deep copying
复制RAII对象必须一并复制它所管理的资源 1.deep copying 或者2.转移底部资源的所有权(这就是auto_ptr存在的意义)
普遍而常见的RAII行为是 抑制copying 实行引用计数法
条款15.RAII提供对于原始资源的访问
//背景:
//使用shared_ptr保存ceate函数返回的对象指针
std::tr1::shared_ptr<Investment> pInv(createInvesment());
//如果希望这样处理Invesment对象
int daysHeld(const Invesment* pi);
//错误用法:
int days = daysHeld(pInv);
//因为pInv是tr1::shared_ptr<Investment>类型对象
//改正:
int days = daysHeld(pInv.get())
//我们在获取shared_ptr管理的对象资源时候的方法,却是通过operator -> operator * 完成的
//这是由于其重载的的operator 允许隐式转换到底部原始指针
所以.get() .size()都是按照对象定义的方法,用于获取资源本身的性质