auto_ptr
управляет указателем. reset
удалит указатель, который у него есть, и укажет на что-то еще.
Итак, вы начинаете с auto_ptr p
, указывая ни на что. Когда вы reset
с new int
, он ничего не удаляет, а затем указывает на динамически распределенный int
. Затем вы назначаете 5 этому int
.
Затем вы снова reset
, удалив ранее выделенный int
, а затем указав на недавно выделенный int
. Затем вы назначаете 10 для нового int
.
Когда функция возвращается, auto_ptr
выходит из области видимости и вызывает ее деструктор, который удаляет последний выделенный int
и программа завершается.