我可以提供删除[]的参数,如delete [3]吗?

时间:2016-02-11 12:06:55

标签: c++ delete-operator dynamic-allocation

我读到delete[]可以解除分配对象数组。但是,在我读过的任何来源中都没有提到,提供像delete[3]之类的参数是错误还是未定义。

我有以下疑问。

  1. 是否在C ++标准中指定是否可以/不能将delete[]的参数改为delete[3]
  2. 如果是,效果是什么?
  3. 在C ++中是否指定我是否可以/不能将delete用于从new[]分配的数组?

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:4)

delete[]是一名运营商。

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

答案 2 :(得分:0)

是的,您可以使用delete [x]运算符传递任何参数,但它没有任何意义。 如果您在destructor中提及任何class,则会在无限时间内致电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将调用无限时间,这是程序未定义的行为。