2015-04-18 91 views
0

我會盡量總結我需要的兩個詞和代碼片段。在課堂/構造函數成員初始化

我有一個類,Foo,其中包含的類型Bar的數據成員:

class Foo { 
    public: 

    Bar instance_of_Bar; 

    Foo (int some_data) 
    { 
     // I need to initialize instance_of_Bar using one of its 
     // constructors here, but I need to do some processing first 


     // This is highly discouraged (and I prefer not to use smart pointers here) 
     instance_of_bar = Bar(..); 
     // As an unrelated question: will instance_of_Bar be default-initialized 
     // inside the constructor before the above assignment? 
    } 
} 

顯然,「正確」的方式做到這一點是使用一個初始化列表如下:

Foo (int some_data) : instance_of_Bar(some_data) {} 

但是這不是一個選項,因爲在將它傳遞給Bar構造函數之前,我需要在some_data上做一些工作。

希望我自己清楚。 RAII的方式是以最少的開銷和複製來實現它(Bar類是一個很重要的類)。

謝謝你一堆。

+2

'新的酒吧(..);'是錯誤的BTW。 –

+0

當然,我的意思是一般的動態分配。我修復了代碼片段(我知道這是一個糟糕的做法,只是試圖指出一個明顯的選擇)。 – Mark

+2

我沒有必要,你可以使用一個臨時實例來複制:'instance_of_bar = Bar(...);'。 –

回答

3

「但是這不是一個選項,因爲在將它傳遞給Bar構造函數之前,我需要在some_data上做一些工作。」

怎麼樣提供了另一種功能,「做some_data一些工作」

Foo (int some_data) : instance_of_Bar(baz(some_data)) {} 

int baz(int some_data) { 
    // do some work 
    return some_data; 
} 
相關問題