直接开始扯
首先我们先定义一个类
class TEST{ public: int v; TEST(); TEST operator+(const TEST& B); }
其中的重载运算符+-如下
TEST TEST::operator+(const TEST& B){ TEST a; a.v=this->v + B.v; return a; }
乍一看是不是非常简单呢
下面来一次测试
int main() { TEST a; std::cout << &a; a.v = 1; TEST b; std::cout << &b; b.v = 2; TEST c; std::cout << &c; c.v = 3; a = b + c; std::cout << &a; }
输出如下
00ADF7F8 00ADF7EC 00ADF7E0 00ADF7F8
我们可以发现 当进行a=b+c的运算时,理论上重载运算符+应该要新生成一个对象,再将新对象赋给a,所以运算前后2次a的内存地址应该是不同的
但实际上a的内存地址并没有被更改
实际上重载运算中会将返回的对象拷贝到a中,然后删除返回对象,因此看起来就像是a没有被动过的样子
虽然会带来性能上的损失,但不会带来内存上的损失