2009-09-12 74 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类型的,因为它们有一个构造函数,所以它们的成员保证在构造之后被初始化。

也许数据被稍后通过内存泄漏覆盖?

如何创建栏的实例?