Class A
{
A(B& b) : mb(b)
{
// I will not access anything from B here
}
B& mb;
};
Class B
{
B(): a(*this)
{}
A a;
}
Run Code Online (Sandbox Code Playgroud)
我可能遇到过这样的情况,包含的对象需要使用容器功能.在包含的对象中引用容器对象似乎是执行此操作的最佳方法.当然,我可以用一个指针来做这个,这样我可以有一个setter setB(B* b) {mb = b;}
,我可以在我确定B初始化后稍后调用但是我更喜欢用引用来做这个,这意味着我需要在它中初始化它构造函数,因此问题.
由于你只是初始化对B的引用,这应该没问题 - 当B的构造函数运行时,它的内存位置已经设置好了.
请记住,你不能安全地从A的构造函数中调用B中的任何方法,因为B还没有完成构建.