класс — C ++ Как имеет значение порядок создания экземпляров?

У меня есть класс, который создает экземпляры других классов, и когда я их вызываю, компилятор выдает мне предупреждение о порядке экземпляров. Почему это имеет значение? Это делает ту же работу, независимо от порядка.

Например. У меня есть это в моем заголовочном файле класса ядра (основной класс обрабатывает игровой цикл):

HUD hud;
World myWorld;

Таким образом, они делают все, что им нужно. Но компилятор выдает предупреждение:

'Core::myWorld' will be initialized after [-Wreorder]|

Затем, если я помещу экземпляр myWorld над экземпляром hud, он больше не будет предупреждать меня. Мне просто интересно, как же это важно, в каком порядке они находятся?

2

Решение

Предупреждение, так как в конструкторе инициализатор-список вы инициализируете World до HUD, но на самом деле члены будут инициализированы в порядке их объявления в классе.

Просто небольшой пример, где может быть хуже:

class B
{
public:
B(int i) : value(i) {}
private:
int value;
};

class A
{
public:
A() : value(10), b(value)
{
}
private:
B b;
int value;
};

Вот b будет инициализирован раньше value и так, что-то будет отправлено b конструктор, но не 10 как программист хочет.

4

Другие решения

С

struct C
{
C() : p(std::make_unique<int>(42)), j(*p) {} // initialization doesn't use this order.

// but the order here:
int j;
std::unique_ptr<int> p;
};

вы будете разыменовывать nullptr как j инициализируется раньше p,

0