Да, это совершенно правильно.
Когда вы назначаете новый объект для unique_ptr
, он уничтожает свой текущий объект и становится владельцем нового объекта.Это ожидаемое и задокументированное поведение.
Как вы можете видеть из своей регистрации, это именно то, что на самом деле происходит:
Construcor (first call to make_unique)
(first assignment, nothing to log here)
foo
Construcor (second call to make_unique)
Destrucor (second assignment, first object destroyed)
foo
Destrucor (main exits, second object destroyed)