Effective_C++:17、在operator=中检查是否“自己赋值给自己”

本文探讨了在operator=中检查自我赋值的重要性及其实现方法,避免资源释放错误和提高赋值效率。

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

17、在operator=中检查是否“自己赋值给自己”

1、为何检查是否“自己赋值给自己”

在使用赋值操作符时,我们只要求调用的对象类型、参数类型正确即可。所以,自己赋值给自己是完全合法的,如可能将一个对象的别名作为另一个对象赋值给这个对象。发生自己赋值给自己,可能会发生一些问题,为此,我们需要检查是否“自己赋值给自己”。

1.为了确保正确性。使用赋值操作符给左边的对象配置新资源时,可能需要先释放他原来配置的资源,此时若发生自己给自己赋值,则会失败,因为他同时也将要配置的新资源释放掉了。如String对象的赋值操作符,就会先delete左边对象的旧有内存,然后再用new配置新内存,若发生自己给自己赋值,则delete之后,同时也将赋值对象的内存delete,无法再使用new来配置新内存。

2.为了效率。在进行赋值时,若是自己给自己赋值,那直接返回即可,而无需进行后续的一些不必要的动作。

2、如何检查是否“自己赋值给自己”

检查是否“自己赋值给自己”,就是检查这两个对象是否相同,即object identity。而对于两个对象是否相同的定义通常为以下两种。

1.检查他们是否有相同的值。

2.检查他们的内存地址是否相同。

而对于要求更精确的时候,可能需要通过一个成员函数返回一个对象识别码来检查两个对象是否相同。

实际上,在出现指针和引用的时候,任何两个代表兼容型别的对象名称,都有可能实际上指向同一个对象。因此,在写函数写代码时,必须考虑这种情况的可能性。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值