在 C++ 中,我引用了一个想要指向其所有者的对象,但我无法在包含类的构造期间设置指针,因为它没有完成构造。
你可以存储指针好了。
您不能做的是尝试通过 B 的构造函数中的指针获取 A 的成员/方法,因为此时父实例可能未完全初始化:
#include <iostream>
class Y;
class X
{
Y* y;
public:
X(Y* y);
};
class Y
{
X x;
int n;
public:
Y(): x(this), n(42) {}
int get_n() const { return n; }
};
X::X(Y* p): y(p)
{
//Now this is illegal:
//as it is, the n member has not been initialized yet for parent
//and hence get_n will return garbage
std::cout << p->get_n() << '\n';
}
int main()
{
Y y;
}
如果要切换 Y 中的成员,那么 n 将首先被初始化,X 的构造函数将打印 42,但这太脆弱而无法依赖。