Вопрос

Если у меня есть такой класс, как этот:

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?

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

В частности, это приводит к сбою:

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

Будем признательны за любую помощь.:)

Это было полезно?

Решение

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

Другие советы

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

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

Как вы создаете экземпляр bar?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top