Я не могу придумать ситуации, в которой
std::shared_ptr<Object> obj(new Object("foo", 1));
было бы предпочтительнее
auto obj = std::make_shared<Object>("foo", 1);
. Последнее всегда приводит к лучшей локальности и уменьшению фрагментации памяти. Есть ли ситуация, в которой вы бы предпочли (или были бы вынуждены) использовать первую форму, кроме взаимодействия с кодом, возвращающим необработанные указатели?