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