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没有被动过的样子
虽然会带来性能上的损失,但不会带来内存上的损失

浙公网安备 33010602011771号