Effective C++(5)

条款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

管理类存放的是资源的指针,我们无法从管理类直接得到一个资源对象。如过需要访问原始对象,最好用显式或者隐式转换得到一个资源对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值