Resource management
R.22
Используйте `make_shared()` для создания `shared_ptr`
Причина
make_shared даёт более лаконичную запись конструирования. Также предоставляет возможность устранить отдельное выделение памяти для счётчика ссылок, размещая счётчики shared_ptr рядом с самим объектом. Кроме того, обеспечивает безопасность при наличии исключений в сложных выражениях (в коде до C++17).
Пример
Рассмотрим:
shared_ptr<X> p1 { new X{2} }; // плохо
auto p = make_shared<X>(2); // хорошо
Версия с make_shared() упоминает X только один раз, поэтому обычно короче (и быстрее), чем версия с явным new.
Контроль
(Простой) Предупреждать, если shared_ptr конструируется из результата new, а не из make_shared.