我确信之前已经提出过这个问题。但我似乎无法找到我正在寻找的确切答案。基本上我试图创建一个类的对象作为另一个类的成员,并通过构造函数引用所拥有的对象传递其中一个成员。有时这似乎有效,有时我会得到一个随机值。
我认为我不理解初始化顺序的一些基本规则
以下是代码示例:
class Foo
{
public:
Foo();
private:
int b;
Bar c;
};
class Bar
{
public:
Bar(int& parm);
private:
int& b_ref;
};
Foo::Foo(): b(0), c(b)
{}
Bar::Bar(int& parm): b_ref(parm)
{}
我想要的是c拥有对b的引用,并且能够在值发生变化时看到该值。
在这种情况下我不应该使用初始化列表吗?
答案 0 :(得分:3)
规则是对象按照class
中声明的顺序进行初始化。在这种情况下,这意味着b
在c
之前初始化,因此此代码应始终正常运行。
如果您交换了b
和c
成员的顺序,则int
引用的param
尚未在Bar
的构造函数中初始化}。