2009-09-12 3 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 Называется при создании экземпляра бара?

Потому что, когда я пытаюсь использовать bar «s m_Data» s quad в bar это, кажется, неинициализированными, даже если он имеет значение в numbers[4]. : \

В частности, это происходит сбой:

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

Любая помощь будет оценена. :)

+2

На несвязанной ноте ваш трюк с профсоюзом, вероятно, повредит работе. Вы представляете много потенциальных псевдонимов, которые компилятор должен учитывать и работать, прямо в середине вашего (предположительно критически важного) SIMD-кода. – jalf

+1

Вам нужно будет опубликовать более полный пример. Вы говорите, что квадрат bar m_Data в баре кажется неинициализированным, хотя он имеет значения в числах [4] «код, который вы выложили, никогда не устанавливает его. –

ответ

2

Вы должны объявить свой конструктор public, иначе вы не сможете создавать экземпляр класса, если объявите его как private.

1

Выглядит хорошо для меня. foo и bar являются не-POD-типами, потому что они имеют конструктор, поэтому их члены, как гарантируется, будут инициализированы после построения.

Возможно, данные будут перезаписаны позже утечкой памяти?

Как создать экземпляр панели?

Смежные вопросы