Отправленный вами фрагмент не вызовет утечку памяти, если, скажем, выделение нового узла с помощью map
завершится неудачно из-за нехватки памяти.Вы создали unique_ptr
перед вызовом map::emplace
, поэтому, если эта функция сгенерирует, unique_ptr
будет delete A
и позволит избежать утечки.
Что автор предположительно подразумевает, что следующий код будет утекатьпамять в аналогичных условиях
std::map<int, std::unique_ptr<A>> m;
m.emplace(1, new A("Ann",63));
В этом случае вы передаете необработанный указатель на emplace
и полагаетесь на функцию для передачи владения указателем на unique_ptr
.Если функция выбрасывает во время выделения нового узла, unique_ptr
не был бы создан для того, чтобы стать владельцем указателя, и в памяти произошла утечка.