В cppref выполняется следующее действие до С++ 17:
код, такой как
f(std::shared_ptr<int>(new int(42)), g())
может вызвать утечку памяти, еслиg
вызывается послеnew int(42)
и генерирует исключение, тогда какf(std::make_shared<int>(42), g())
безопасен, поскольку два вызова функций никогда не чередуются.
Мне интересно, какое изменение, внесенное в С++ 17, делает это более неприменимым.