2013-03-18 72 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