1

我确信这个问题以前被问过。但我似乎无法找到我正在寻找的确切答案。基本上我试图创建一个类的对象作为另一个类的成员,并通过构造函数引用拥有的对象来传递其中一个成员。有时这似乎有效,有时我得到一个随机值。

我认为我不了解初始化顺序的一些基本规则

这是代码示例:

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 的引用,并且能够在值发生变化时看到它。

在这种情况下我不应该使用初始化列表吗?

4

1 回答 1

3

规则是对象按照它们在class. 在这种情况下,这意味着b在 之前已初始化c,因此此代码应始终正常工作。

如果你交换了bandc成员的顺序,那么int引用的 byparam将不会在 的构造函数中初始化Bar

于 2013-03-18T04:43:05.407 回答