Я просматривал статью 17 Эффективного C++ 3-го издания.
В нем упоминается тот порядок, в котором выполняются аргументы для вызова функции:
processWidget(std::tr1::shared_ptr<Widget> pw(new Widget), priority());
может быть:
1) Выполнить «новый виджет» 2) Приоритет вызова 3) Вызов tr1::shared_ptr c'tor.
Действительно ли это так в последних компиляторах C++. Я имею в виду, я твердо уверен, что компилятор должен вызывать шаги 1 и 3 один за другим, а не как в приведенном выше случае, поскольку это один единственный аргумент. Пожалуйста, поправьте меня, если я неправильно понимаю. Кроме того, если кто-то задал этот вопрос, вы можете перенаправить его на эту страницу, так как я не нашел ничего в SO.
std::make_shared
. - person user4581301   schedule 16.03.2019std::make_shared
не только предотвращает утечку памяти до C++17, но и объединяет выделения памяти, что не всегда является лучшим вариантом. - person Passer By   schedule 16.03.2019