条款12 Copy all parts of an Object
自己实现copy构造函数或者copy assignment操作符是可能会出现的问题2:
1.复制不全,可能在成员中加入了新类后未复制
2.未derived class编写copying时会忘记复制其base class
一定要让derived class的copying函数调用base class的copying 函数!(因为base class中的内容一般为private,无法直接访问,直接使用copying函数即可)
不要在copy assignment操作符中调用copy构造函数,反之亦然,如果两者中有很多相似代码,可以定义成员函数init(),使得两者均可调用init()。
条款13 Use objects to manage resources
主要掌握RAII的思想(Resource Acquisition Is Initialization)——获取资源的时机就是初始化时机。其中的auto_ptr由于已过时,这里就不写了
条款14 Think carefully about copying behavior in resource-managing classes
若要复制一个RAII对象时,需要怎么做?
1.禁止复制(std::unique_ptr)
2.引用计数法(std::shared_ptr),和mutex一起使用,避免在引用数为0时自动被删除。释放动作改为解除锁定
3.拷贝底层资源(std::string),进行深拷贝
4.移动管理资源的所有权(std::unique_ptr)
条款15 Provide access to raw resources in resource-managing classes
管理类存放的是资源的指针,我们无法从管理类直接得到一个资源对象。如过需要访问原始对象,最好用显式或者隐式转换得到一个资源对象