一个operator+的易误用知识点

本文讨论了类的运算符重载如+在内存管理和效率方面的问题。当使用引用时,临时对象可能不会立即析构,导致内存堆积。解决方案是改用值传递,确保每个临时对象在每次循环中都被正确析构,从而减少内存占用。同时,const修饰符用于保护常量成员不被意外修改。
摘要由CSDN通过智能技术生成

operate+等重载函数可以使类之间能执行加减等运算。

3535727e97d21161a256f436f45b4cdf.png

a = a + b + b 该式中,程序先计算 a + b 并为其分配一个临时对象,再让该变量再加b,把返回引用赋给 a。

其中, a + b 这个临时变量并没有得到自动的析构,因此在内存中堆积,要到程序结束才会被操作系统回收内存(但不会调用析构函数),最后剩余内存不足。

虽然传递引用能提高效率,但是在内存上这样的临时变量不会得到及时的析构。

解决方案:

operator+改为传递值,而不是引用。

a7c325d70a309065214ed0f840f436b8.png

这里for循环里面a+b会生成一个临时对象(假定称为x),a+b+b也就是x+b会生成另一个临时对象(假定称为y),最后y通过拷贝构造函数复制给a,x和y的生命周期限定在for循环一次循环内,也就是循环一次会生成两个临时对象并析构,减少内存占用。

上面成员函数之所以需要使用const修饰,是因为const 类只能访问 const 型成员函数,防止其成员被外界修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值