我可以像 delete[3] 一样为 delete[] 提供参数吗?
Can I supply argument to delete[] like delete[3]?
我读到 delete[]
可以释放对象数组。然而,在我读过的任何来源中都没有提到提供像 delete[3]
这样的参数是错误还是未定义。
我有以下疑问。
- 是否在 C++ 标准中指定了我是否 can/cannot 将参数提供给
delete[]
作为 delete[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
将调用无限时间, 这是程序未定义的行为。
我读到 delete[]
可以释放对象数组。然而,在我读过的任何来源中都没有提到提供像 delete[3]
这样的参数是错误还是未定义。
我有以下疑问。
- 是否在 C++ 标准中指定了我是否 can/cannot 将参数提供给
delete[]
作为delete[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
将调用无限时间, 这是程序未定义的行为。