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)
我们创建对象:
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)
手段:
Data
将是垃圾)Data