Элементы инициализируются в порядке их появления в объявлении класса перед выполнением тела конструктора.Итак, что происходит:
nScreenWidth
инициализируется по умолчанию (см. здесь ) nScreenHeight
инициализируется по умолчанию screen
инициализируется с new wchar_t[nScreenWidth*nScreenHeight]
- только теперь конструктор запускается, и вы присваиваете значения
nScreenWidth
и nScreenHeight
Используйте список инициализатора для всех членов, чтобы избежать путаницы:
Display(int Width, int Height) :
nScreenWidth(Width), nScreenHeight(Height), screen(new wchar_t[nScreenWidth*nScreenHeight])
{
DWORD dwBytesWritten = 0;
for (int i = 0; i < (nScreenWidth*nScreenHeight); i++) screen[i] = L'';
SetConsoleActiveScreenBuffer(hConsole);
}
Еще лучше было бы использовать std::vector<wchar_t>
, конструктор был бы
Display(int Width, int Height) :
nScreenWidth(Width), nScreenHeight(Height), screen(Width*Height)
{
...
и вместо того, чтобы беспокоиться о правиле трех / пяти Вы можете положиться на правило нуля.