我读到delete[]
可以解除分配对象数组。但是,在我读过的任何来源中都没有提到,提供像delete[3]
之类的参数是错误还是未定义。
我有以下疑问。
delete[]
的参数改为delete[3]
?delete
用于从new[]
分配的数组?答案 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
将调用无限时间,这是程序未定义的行为。