2013-03-18 68 views
1

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

我觉得我不理解初始化顺序

这里的一些基本规则的代码示例:

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的引用,并能看到价值随着它的变化而变化。

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

回答

3

规则是按照class中声明的顺序初始化对象。在这种情况下,这意味着bc之前被初始化,因此该代码应该始终正常工作。

如果换了bc成员的顺序,然后通过param引用的int将尚未在的Bar构造函数初始化。

+0

是的,我刚刚意识到我的实际代码有成员交换!谢谢你,这正是问题所在。 – MadOgre 2013-03-18 04:45:41