在 C++ 中创建对象时传递自己的地址
pass own address while creating object in c++
我是下面的代码
struct Me {
Me(Me* a) { std::cout << "Processing " << a << std::endl; }
};
int main() {
Me a(&a);
std::cout << "Created obj in " << &a << std::endl;
Me* ak = new Me(ak);
std::cout << "Created obj in " << ak << std::endl;
delete ak;
return 0;
}
输出为
Processing 0x7ffdbd7f0607
Created obj in 0x7ffdbd7f0607
Processing 0x5653b66b5110
Created obj in 0x5653b6d35120
正如您所观察到的,前两行输出很好,因为传递给构造函数的地址与正在创建的对象相同,但为什么动态创建不能做到这一点。有人可以为此提供可能的解决方案的描述吗?
在Me a(&a);
中,它取一个未初始化变量a
的地址。地址有效,但该地址处的对象尚不存在。一旦输入构造函数,对象就被认为是存在的。
在Me* ak = new Me(ak);
中ak
不是Me
构造函数returns之后的初始化单元。这导致将 ak
的不确定值传递给 Me
构造函数。
Can someone provide a description with possible solution for this?
解决方案是 this
:
struct Me {
Me() { std::cout << "Processing " << this << std::endl; }
};
有关完整详细信息,请参阅 this pointer。
我是下面的代码
struct Me {
Me(Me* a) { std::cout << "Processing " << a << std::endl; }
};
int main() {
Me a(&a);
std::cout << "Created obj in " << &a << std::endl;
Me* ak = new Me(ak);
std::cout << "Created obj in " << ak << std::endl;
delete ak;
return 0;
}
输出为
Processing 0x7ffdbd7f0607
Created obj in 0x7ffdbd7f0607
Processing 0x5653b66b5110
Created obj in 0x5653b6d35120
正如您所观察到的,前两行输出很好,因为传递给构造函数的地址与正在创建的对象相同,但为什么动态创建不能做到这一点。有人可以为此提供可能的解决方案的描述吗?
在Me a(&a);
中,它取一个未初始化变量a
的地址。地址有效,但该地址处的对象尚不存在。一旦输入构造函数,对象就被认为是存在的。
在Me* ak = new Me(ak);
中ak
不是Me
构造函数returns之后的初始化单元。这导致将 ak
的不确定值传递给 Me
构造函数。
Can someone provide a description with possible solution for this?
解决方案是 this
:
struct Me {
Me() { std::cout << "Processing " << this << std::endl; }
};
有关完整详细信息,请参阅 this pointer。