我是C++的新手,我对数组和指针感到困惑.有人能告诉我如何正确删除指针.例如,
int *foo;
foo = new int[10];
delete foo;
Run Code Online (Sandbox Code Playgroud)
要么
delete [] foo;
Run Code Online (Sandbox Code Playgroud)
谢谢.
Jer*_*fin 19
将new []与delete []匹配的要求在技术上是正确的.
然而,更好的是忘记你曾经听说过新的[],再也不会再使用它了.我很确定自从上次使用新[]以来已经(至少)10年了,如果我对这种情况了解得很清楚,我就会早点停下来.几乎任何时候你甚至考虑使用new [],std :: vector(或者可能是std :: deque)将是更好的选择.
它的:
delete[] foo;
Run Code Online (Sandbox Code Playgroud)
编辑:现代编译器确实需要您使用正确的delete运算符,否则它们可能会泄漏内存或无法运行正确的析构函数.
(我之前曾说过,它在实践中没有什么区别.大约10年前,我尝试了许多不同的编译器,如果你错误地省略了它,却找不到实际泄露内存的编译器[].但是暴徒的嚎叫 - 见下文 -迫使我重新尝试我的实验,似乎现代编译器/ libc ++真的很关心.)
如果使用new []运算符分配对象数组,则必须使用delete []运算符,因此非数组new只能与非数组一起使用delete.
int *a = new int[10];
int *b = new int;
delete [] a;
delete b;
Run Code Online (Sandbox Code Playgroud)