D
std::make_shared
всё равно производит одну аллокацию вместо двух, если создавать через new
+ конструктор. У этого есть плюсы и минусы. Минус: когда был аллоцирован большой объект и все ссылки на него исчезли, а слабые ссылки — нет, то весь большой кусок памяти всё равно висит в оперативке из-за этих слабых ссылок 2. Чисто эстетически мне кажется
make_shared
выглядит лучше. Потому что при создании через конструктор у нас есть new
, но нет delete
. Несимметрично.