У меня есть класс, который создает экземпляры других классов, и когда я их вызываю, компилятор выдает мне предупреждение о порядке экземпляров. Почему это имеет значение? Это делает ту же работу, независимо от порядка.
Например. У меня есть это в моем заголовочном файле класса ядра (основной класс обрабатывает игровой цикл):
HUD hud;
World myWorld;
Таким образом, они делают все, что им нужно. Но компилятор выдает предупреждение:
'Core::myWorld' will be initialized after [-Wreorder]|
Затем, если я помещу экземпляр myWorld над экземпляром hud, он больше не будет предупреждать меня. Мне просто интересно, как же это важно, в каком порядке они находятся?
Предупреждение, так как в конструкторе инициализатор-список вы инициализируете 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
как программист хочет.
С
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
,