用 delete 释放数组不可漏写中括号
2.15 ID_insufficientDelete
用 new[] 分配的数组应该用 delete[] 释放,不可漏写中括号,否则会导致标准未定义的行为。
示例:
void foo(int n) {
auto* p = new X[n]; // n default-constructed X objects
....
delete p; // Non-compliant, use ‘delete[] p;’ instead
}
在某些环境中,可能只有第一个对象的析构函数被执行,其他对象的析构函数都没有被执行,如果对象与资源分配有关就会导致资源泄漏。
相关
依据
ISO/IEC 14882:2003 5.3.5(2)-undefined
ISO/IEC 14882:2011 5.3.5(2)-undefined
ISO/IEC 14882:2017 8.3.5(2)-undefined