Нестатические члены данных инициализируются в порядке объявления в определении класса.Таким образом, в данном конкретном случае это работает так, как window
объявлено до drawer
в определении App
.Но если вы измените порядок, это не будет работать так, как задумано.
Но компилятор предупредит вас об этом с соответствующим уровнем предупреждения.GCC 8.2 с опцией -Wall
выдает следующие предупреждения, если порядок обратный.
#1 with x86-64 gcc 8.2
<source>: In constructor 'App::App()':
<source>:16:14: warning: 'App::window' will be initialized after [-Wreorder]
Window window;
^~~~~~
<source>:15:14: warning: 'Drawer App::drawer' [-Wreorder]
Drawer drawer;
^~~~~~
<source>:13:4: warning: when initialized here [-Wreorder]
App() : window(1366, 768), drawer(window) {}
^~~
Поскольку drawer
инициализируется первым, он не будет инициализирован с объектом window
, который был создан сзначения 1366 и 768.