c++ delete []是否适用于原始类型
Is c++ delete [] applicable to primitive types
在C++中,如果我有一个原始类型的动态分配数组,是否有必要使用delete[]来防止内存泄漏?
例如,
char * x = new char[100];
delete x; // is it required to call delete [] x?
struct A {
...
};
A *p = new A[30];
delete [] p; // delete p would cause memory leakage
请评论。
当你使用new
运算符的数组形式时,你必须使用delete
运算符的数组形式。
char * x = new char[100];
delete [] x;
char * y = new char;
delete y;
new
和delete
一起使用的形式不依赖于开始分配和释放的对象类型。
如果你使用
A *p = new A[30];
delete [] p;
该程序存在未定义的行为。可能会导致内存泄漏,继续运行但也可能会崩溃
是的。 delete [] 运算符只是告诉编译器删除数组的所有元素,而不仅仅是第一个元素。这适用于所有类型,整数和非整数。
是的,因为语言需要它。
当数组是标量类型时,很可能如果您不小心使用 delete
而不是 delete[]
那么您的程序仍然可以运行。但它仍然是未定义的行为---标准不保证它有效,你的编译器的下一个版本可能会破坏你的程序。
如果您通过 new T[n]
分配内存,则必须通过 delete[]
.
删除它
参考Faq问题。
pointer = new T
pointer = new T [number_of_elements]
第一个表达式用于分配内存以包含类型 T
的单个元素。第二个用于分配 T
类型元素的块(数组),其中 number_of_elements 是表示这些元素数量的整数值。例如:
1. int * foo;
2. foo = new int [5];
在下面的语句中,第一个语句释放使用new分配的单个元素的内存,第二个语句使用new释放为元素数组分配的内存,并在括号([])中分配内存。
1. delete pointer;
2. delete[] pointer;
运算符delete
的形式必须对应运算符new
的形式。所以用 AnyType *x = new AnyType[n]
分配的数组必须用 delete [] x
释放。以任何其他方式(如 delete x
)释放会产生未定义的行为。对于任何类型 - 原始类型或非原始类型。
在C++中,如果我有一个原始类型的动态分配数组,是否有必要使用delete[]来防止内存泄漏? 例如,
char * x = new char[100];
delete x; // is it required to call delete [] x?
struct A {
...
};
A *p = new A[30];
delete [] p; // delete p would cause memory leakage
请评论。
当你使用new
运算符的数组形式时,你必须使用delete
运算符的数组形式。
char * x = new char[100];
delete [] x;
char * y = new char;
delete y;
new
和delete
一起使用的形式不依赖于开始分配和释放的对象类型。
如果你使用
A *p = new A[30];
delete [] p;
该程序存在未定义的行为。可能会导致内存泄漏,继续运行但也可能会崩溃
是的。 delete [] 运算符只是告诉编译器删除数组的所有元素,而不仅仅是第一个元素。这适用于所有类型,整数和非整数。
是的,因为语言需要它。
当数组是标量类型时,很可能如果您不小心使用 delete
而不是 delete[]
那么您的程序仍然可以运行。但它仍然是未定义的行为---标准不保证它有效,你的编译器的下一个版本可能会破坏你的程序。
如果您通过 new T[n]
分配内存,则必须通过 delete[]
.
参考Faq问题。
pointer = new T
pointer = new T [number_of_elements]
第一个表达式用于分配内存以包含类型 T
的单个元素。第二个用于分配 T
类型元素的块(数组),其中 number_of_elements 是表示这些元素数量的整数值。例如:
1. int * foo;
2. foo = new int [5];
在下面的语句中,第一个语句释放使用new分配的单个元素的内存,第二个语句使用new释放为元素数组分配的内存,并在括号([])中分配内存。
1. delete pointer;
2. delete[] pointer;
运算符delete
的形式必须对应运算符new
的形式。所以用 AnyType *x = new AnyType[n]
分配的数组必须用 delete [] x
释放。以任何其他方式(如 delete x
)释放会产生未定义的行为。对于任何类型 - 原始类型或非原始类型。