在下面的代码中,我有一个 A
类的对象。我用 0
的值启动它的公共(public)成员变量。然后我调用它的方法 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
最佳答案
我们创建对象:
A foo;
并设置其Data
成员:
foo.Data = 0;
然后,在 ReplaceThis()
中:
*this = A();
意思是:
- 创建一个新对象(其
Data
将是垃圾) - 将该对象的值分配给我们的对象
- 没有改变我们对象的地址
- 但我们现在有了新对象的垃圾
Data
关于c++ - 为什么在这种情况下成员变量改变了,而对象的地址却保持不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805966/