Resource management
R.21
Предпочитайте `unique_ptr` вместо `shared_ptr`, если не нужно разделять владение
Причина
unique_ptr концептуально проще и предсказуемее (известно, когда произойдёт уничтожение) и быстрее (нет неявного ведения счётчика ссылок).
Пример (плохой)
Излишне добавляет и поддерживает счётчик ссылок.
void f()
{
shared_ptr<Base> base = make_shared<Derived>();
// используем base локально, не копируя — счётчик ссылок никогда не превышает 1
} // уничтожаем base
Пример
Это эффективнее:
void f()
{
unique_ptr<Base> base = make_unique<Derived>();
// используем base локально
} // уничтожаем base
Контроль
(Простой) Предупреждать, если функция использует Shared_pointer на объект, выделенный внутри функции, но никогда не возвращает его и не передаёт в функцию, требующую Shared_pointer. Предлагать использовать unique_ptr.