Expressions and statements
ES.61
Удаляйте массивы через `delete[]`, а не-массивы через `delete`
Причина
Этого требует язык; несоответствие может привести к ошибкам освобождения ресурсов и/или повреждению памяти.
Пример (плохой)
void f(int n)
{
auto p = new X[n]; // n объектов X, инициализированных по умолчанию
// ...
delete p; // ошибка: удаляет только объект p, а не массив p[]
}
Примечание
Этот пример нарушает не только правило об отсутствии голых new, как в предыдущем примере, но и содержит множество других проблем.
Контроль
- Отмечать несоответствующие
newиdelete, если они находятся в одной области видимости. - Отмечать несоответствующие
newиdelete, если они находятся в паре конструктор/деструктор.