Rule A18-5-3 (required, implementation, automated)
The form of the delete expression shall match the form of the new expression used to allocate the memory.
Rationale
Plain and array forms of new and delete expressions must not be mixed. If an array was allocated using a new expression, then an array delete expression must be used to deallocate it and vice versa.
Example
// $Id: A18-5-3.cpp 316977 2018-04-20 12:37:31Z christof.meerwald $
#include <cstdint>
void Fn1()
{
std::int32_t* array =
new std::int32_t[10]; // new expression used to allocate an
// array object
// ...
delete array; // Non-compliant - array delete expression supposed
// to be used
}
void Fn2()
{
std::int32_t* object = new std::int32_t{0}; // new operator used to
// allocate the
// integer type
memory for an
// ...
delete[] object; // Non-compliant - non-array delete expression supposed
// to be used
}
void Fn3()
{
std::int32_t* object = new std::int32_t{0};
std::int32_t* array = new std::int32_t[10];
// ...
delete[] array; // Compliant
delete object;
// Compliant
}
See also
HIC++ v4.0 [9]: 5.3.3 Ensure that the form of delete matches the form of new used to allocate the memory.