在下面的代码中,我有一个类A
的对象。我使用值0
启动其公共成员变量。然后我调用它的方法ReplaceThis
来执行命令*this = A();
。然后我打印同一个对象的值和地址。该值始终是一些随机的乱码,而地址保持与ReplaceThis
之前相同。这让我感到困惑,因为未更改的地址表示对象没有在内存中移动,但是即使A
的构造函数为空,值也会变为一些随机数据。
如果有人能够逐步解释此代码中的内容,我将非常感激!
代码:
#include <iostream>
class A
{
public:
int Data;
A() {}
void ReplaceThis() { *this = A(); }
};
int main()
{
A foo;
foo.Data = 0;
std::cout << "Initial foo data: " << foo.Data << std::endl;
std::cout << "Initial foo address: " << &foo << std::endl;
foo.ReplaceThis();
std::cout << "Replaced foo data: " << foo.Data << std::endl;
std::cout << "Replaced foo address: " << &foo << std::endl;
}
输出:
Initial foo data: 0
Initial foo address: 0x7fff604594a0
Replaced foo data: 6296256
Replaced foo address: 0x7fff604594a0
答案 0 :(得分:6)
我们创建对象:
A foo;
并设置其Data
成员:
foo.Data = 0;
然后,在ReplaceThis()
:
*this = A();
表示:
Data
将是垃圾)Data
答案 1 :(得分:1)
在本声明中
*this = A();
由编译器隐式定义复制或移动赋值运算符。它只是简单地制作右手对象的成员副本。对象的地址不会改变。