条款11:在operator = 中处理“自我赋值”

博客介绍了C++中因指针、引用和多态产生的自我赋值现象,指出当pb和rhs指向同一对象时存在隐患,如new失败、pb指向被删内存且效率不高。还提到了copy and swap技术,总结了确保对象自我赋值时operator=良好行为的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、自我赋值现象

由于指针和引用的存在,还有多态,使得存在自我赋值的现象。

 

二、自我赋值存在的隐患

这里存在的问题是 pb 和 rhs指向同一个对象的时候,,,,,,

 

仍然存在隐患:new失败怎么办?pb指向一块被删除的内存。

 

行得通,但是效率不高

 

三、copy and swap技术

 

这个技巧在《C++ primer》中详细有介绍。

 

总结:

1、确保当对象自我赋值时 operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap

2、确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值