Loo*_*oom 6 c++ initialization circular-dependency circular-reference member-initialization
例如,我有两个班
class Foo;
class Bar;
class Foo {
const Bar &m_bar;
...
};
class Bar {
const Foo &m_foo;
...
};
Run Code Online (Sandbox Code Playgroud)
让我们foo为对象Foo和bar为对象Bar.有什么办法(正常或"黑客")创建/初始化foo和bar其成员m_bar,并m_foo会互相引用(我的意思foo.m_bar是bar和bar.m_foo是"富")?
允许添加任何成员,Foo并Bar为其添加父项,以使其成为模板等.
什么是foo和bar?的联系?如果他们有外部链接,你可以写如下:
extern Foo foo;
extern Bar bar;
Foo foo( bar );
Bar bar( foo );
Run Code Online (Sandbox Code Playgroud)
(我在这里假设它是构造函数,它设置了对参数的引用.)
当然,这假定了命名空间范围和静态生命周期(但是匿名命名空间很好).
如果他们是班级成员,也没有问题:
class Together
{
Foo foo;
Bar bar;
public:
Together() : foo( bar ), bar( foo ) {}
};
Run Code Online (Sandbox Code Playgroud)
如果它们是局部变量(没有约束力),我认为没有解决方案.
实际上,局部变量有一个简单的解决方案:只需定义一个将它们作为成员的本地类,然后使用它.