c++中重载运算符的小细节

直接开始扯

首先我们先定义一个类

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没有被动过的样子

  虽然会带来性能上的损失,但不会带来内存上的损失

 

posted @ 2020-08-24 16:43  [呲溜]  阅读(82)  评论(0编辑  收藏  举报