28 April 2023

C++ 核心指南目录

“Delete arrays using delete[] and non-arrays using delete

理由

这条是开发语言要求的。搞错了的话会导致资源释放错误,内存错乱。

坏例子

void f(int n)
{
    auto p = new X[n];   // n default constructed Xs
    // ...
    delete p;   // error: just delete the object p, rather than delete
                // the array p[]
}

注意

这个例子还违背了“no naked new”规则。

强化

  • 如果 newdelete 在同一个作用域范围,可以标记错误。
  • 如果 newdelete 在构造/析构函数对中,可以标记错误。