Функция std :: make_shared () чаще всего предпочтительнее std :: shared_ptr {new t} , потому что она будет только одно распределение, в отличие от двух ассигнований во втором примере. Есть несколько других различий, как подробно описано в cppreference on std :: make_shared.
Насколько мне известно, дело отличается для std :: make_unique () vs. std :: inistry_ptr {new t} . Перед C ++ 17 нам нужны были функции Make _ для вывода аргументов шаблона, но, поскольку C ++ 17, компилятор может вывести их из оператора инициализации. Какие компромиссы?
Подробнее здесь: https://stackoverflow.com/questions/797 ... 7-or-later