В вашем блоке catch у вас есть:
if(pw->ok == NULL)
На данный момент pw
равно NULL
(или мусор, если вы его не инициализировали).pw-ok
пытается разыменовать его, давая неопределенное поведение (в данном случае сбой).
Если вы не инициализировали его, то delete pw
завершится сбоем перед выводом сообщения «catch»;скорее всего, он напечатает сообщение «Dtor» перед сбоем, но нет никакой гарантии, так как вы твердо находитесь в сфере неопределенного поведения.
Если вы его инициализировали, то delete pw
не требуется, нобезвредны;удаление нулевого указателя определено, чтобы ничего не делать.Таким образом, в этом случае вы не будете аварийно завершать работу, пока не прекратите его разыскивать.
В любом случае у вас будет нефиксированная утечка памяти - первое выделение ok = new int[1024]
будет выполнено успешно, но вы потеряли единственный указатель на него,Вот почему вы всегда должны управлять динамической памятью, используя умные указатели, контейнеры и другие RAII методы.