Effective C++ 条款13~15

条款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()都是按照对象定义的方法,用于获取资源本身的性质

猜你喜欢

转载自blog.csdn.net/u014297722/article/details/79937287
今日推荐