2011-11-22 97 views
7
class gene{ 
    int ind; 

    gene() { 
     ind = 0; 
    } 
} 

class network { 
    gene g[10]; 
} 

main() { 
    network n; 
} 

我應該爲g數組中的每個對象調用構造函數,還是會自動調用它?構造函數是否作爲類的成員立即調用對象數組?

e.g,我應該改變網絡類,如下所示:

class network { 
    gene g[10]; 

    network() { 
     for(int i = 0; i < 10; i++) 
      g[i] = gene(); 
    } 
} 
+2

如果它尚未建立,你的改變將是一場災難。您將在未構建的對象上調用'operator ='。 –

+2

我並不是想表達自己的看法,但是在你提出問題的時候,你可以對它進行測試。 –

+3

@Steve:測試只會證明一個編譯器的行爲,這不一定是標準保證的。 – ildjarn

回答

7

在你的情況,因爲gene有一個不平凡的默認構造函數,該陣列中的每個元素將是缺省構造的爲您服務。也就是說,你的改變是不必要的。

在您陣列的底層類型是POD類型的情況下,需要手動初始化元素。然而,你做這件事的方式並不理想,您可能需要使用值初始化代替:

class network { 
    somePodType x[10]; 
public: 
    network() : x() { } 
}; 
相關問題