Проблема возникает еще до того, как вы начнете динамически распределять объекты.Если вы запустите программу с подключенным отладчиком, вы увидите, что программа завершается из-за переполнения стека.Почему?
Obj* ptr[1000000];
Невозможно объявить такой большой объект с автоматической продолжительностью хранения.Когда вводится main
, он пытается выделить место в стеке для этого объекта и не может этого сделать, что вызывает структурное исключение переполнения стека.Ваше приложение не обрабатывает это исключение, поэтому среда выполнения завершает программу.
Обратите внимание, однако, что деструктор Obj
никогда не будет вызываться вашей программой.Когда вы динамически выделяете объект с помощью new
, вы несете ответственность за его уничтожение с помощью delete
.Поскольку вы никогда не вызываете delete
для уничтожения созданных вами объектов, они никогда не уничтожаются.
Если бы вы использовали, скажем, std::vector<std::unique_ptr<Obj>>
вместо (или, в этом отношении, просто std::vector<Obj>
), вы бы увидели, что деструктор будет вызываться для каждого полностью созданного Obj
объект.