我可以像 delete[3] 一样为 delete[] 提供参数吗?

Can I supply argument to delete[] like delete[3]?

我读到 delete[] 可以释放对象数组。然而,在我读过的任何来源中都没有提到提供像 delete[3] 这样的参数是错误还是未定义。

我有以下疑问。

  1. 是否在 C++ 标准中指定了我是否 can/cannot 将参数提供给 delete[] 作为 delete[3]
  2. 如果有,效果如何?
  3. 是否在 C++ 中指定了我是否 can/cannot 使用 delete 作为从 new[] 分配的数组?

(1) 是的,它指定你不能。

(3) 指定结果未定义,所以不要。

delete[] 是运算符。

delete[x] 不是有效的 c++ 语法,因此代码无法编译。

是的,您可以使用 delete [x] 运算符传递任何参数,但它没有任何意义。 如果您在 class 中提及任何 destructor,那么它将无限期地调用 destructor。 请参阅下面的示例

#include <iostream>
using namespace std;
class A
{
public: 
A() {
cout<<"\n Calling A constructor ";
}
/*~A(){
cout<<"\n Calling A Destructor ";
  }*/
};
int main()
{
A *a1= new A();

delete [3] a1;

return 0; 
}

上面的程序(用VC++测试)编译和运行成功,如果取消注释destructor部分则编译成功但destrutor将调用无限时间, 这是程序未定义的行为。