一个operator+的易误用知识点

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 型成员函数,防止其成员被外界修改。

猜你喜欢

转载自blog.csdn.net/weixin_38420245/article/details/123102889