为什么成员变量会发生变化,但对象的地址在这种情况下保持不变?

Lau*_*kas 2 c++ constructor this

在下面的代码中,我有一个类的对象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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Initial  foo data: 0
Initial  foo address: 0x7fff604594a0
Replaced foo data: 6296256
Replaced foo address: 0x7fff604594a0
Run Code Online (Sandbox Code Playgroud)

Pau*_*oub 6

我们创建对象:

A foo;
Run Code Online (Sandbox Code Playgroud)

并设置其Data成员:

foo.Data = 0;
Run Code Online (Sandbox Code Playgroud)

然后,在ReplaceThis():

*this = A();
Run Code Online (Sandbox Code Playgroud)

手段:

  1. 创建一个新对象(Data将是垃圾)
  2. 将该对象的值分配给我们的对象
  3. 没有任何改变我们对象的地址
  4. 但是我们现在有了新对象的垃圾 Data