Expressions and statements
ES.24
Используйте `unique_ptr<T>` для хранения указателей
Причина
Использование std::unique_ptr — простейший способ избежать утечек. Он надёжен, заставляет систему типов выполнять большую часть работы по проверке безопасности владения, повышает читаемость и имеет нулевые или близкие к нулю накладные расходы во время выполнения.
Пример
void use(bool leak)
{
auto p1 = make_unique<int>(7); // OK
int* p2 = new int{7}; // плохо: может привести к утечке
// ... p2 не присваивается ...
if (leak) return;
// ... p2 не присваивается ...
vector<int> v(7);
v.at(7) = 0; // бросает исключение
delete p2; // слишком поздно для предотвращения утечек
// ...
}
Если leak == true, объект, на который указывает p2, утекает, а объект, на который указывает p1, — нет. То же самое происходит при выбросе исключения из at(). В обоих случаях оператор delete p2 не достигается.
Контроль
Ищите необработанные указатели, являющиеся целями new, malloc() или функций, которые могут возвращать такие указатели.