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