在 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