2009-09-12 108 views
0

調用構造函數如果我有這樣一個類:從另一個類

typedef union { __m128 quad; float numbers[4]; } Data 

class foo 
{ 
public: 
    foo() : m_Data() {} 

    Data m_Data; 
}; 

和一類這樣的:讓酒吧的實例時

class bar 
{ 
public: 

    bar() : m_Data() {} 

    foo m_Data; 
} 

被稱爲Foo的構造函數?

因爲當我嘗試使用barm_Dataquadbar這似乎是未初始化的,即使它在numbers[4]值。 :\

具體地,該崩潰:

m_Data.quad = _mm_mul_ps(m_Data.quad, a_Other.m_Data.quad) 

任何幫助,將不勝感激。 :)

+2

在不相干的筆記上,你的工會訣竅可能會損害表現。您正在引入很多潛在的別名,編譯器必須考慮並解決這些別名,正好在您的(可能是性能至關重要的)SIMD代碼中。 – jalf

+1

您必須發佈更完整的示例。你說「酒吧的m_Data的四邊形吧,它似乎是未初始化的,即使它有數字值[4]」你發佈的代碼從來沒有設置它。 –

回答

2

你必須聲明你的構造函數爲public,否則你不允許任何人實例化你的類,如果你聲明它爲private成員。

1

對我很好。 foo和bar是非POD類型的,因爲它們有一個構造函數,所以它們的成員保證在構造之後被初始化。

也許數據被稍後通過內存泄漏覆蓋?

如何創建欄的實例?