C++学习之赋值运算符函数

本文探讨了C++中赋值运算符函数的调用时机、何时需要自定义以及编写时的注意事项。当类包含指针或动态资源时,需要自定义赋值运算符函数以避免问题。在编写时应注意返回自身引用、接受常量引用参数、避免内存泄漏和处理自我赋值的情况。同时,文章提到了考虑异常安全性的经典解法,即使用临时实例交换来确保即使在异常情况下也能保持对象状态的完整性。
摘要由CSDN通过智能技术生成

什么时候赋值运算符符号被调用?

一个已经被初始化的实例从另一个实例中被赋予初值的时候,赋值运算符函数被调用(注意其和拷贝构造函数的区别)

Test T1, T2;
T2 = T1; //assignment operator called

什么时候我们应该写我们自己的赋值运算符函数?

一般来说,如果class中不包含指针,我们就没有必要单独写自己的赋值运算符函数,因为编译器会为每个class创建一个默认的赋值运算符函数,但是如果我们的类中存在指针或者运行中的资源分配,编译器默认的赋值运算符函数就不够用了。因为如果包含指针的话,通过系统默认赋值,两个实例的指针会 指向同一片内存区域,导致出现问题。

我们写赋值运算符函数的时候要注意什么?

1. 返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用 *this,否则不能连续赋值(T1=T2=T3)

2. 传入的参数声明为常量引用。如果不是引用,在传参的过程中会调用复制构造函数;如果不是常量,则会在函数里改变传入实例的状态。

3. 在分配新内存之前应该先释放实例自身的内存,否则会出现内存泄漏(动态分配的内存没有被及时回收,也不能再被利用)

4. 判断传入的参数和当前的实例(*this)是不是同一个,如果是同一个实例,那么在释放本实例内存的时候,传入的实例内存也被释放了

经典解法:

<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值