在 C++ 中,如果你想动态分配一个数组,你可以这样做:
int *p;
p = new int[i]; // i is some number
然而,要删除数组,您需要使用 delete[]
而不是 delete
。
delete[] p;
为什么不是delete p[]
?那样岂不更符合最初创建的方式吗?如果有任何原因,为什么语言被设计成这样?
在 C++ 中,如果你想动态分配一个数组,你可以这样做:
int *p;
p = new int[i]; // i is some number
然而,要删除数组,您需要使用 delete[]
而不是 delete
。
delete[] p;
为什么不是delete p[]
?那样岂不更符合最初创建的方式吗?如果有任何原因,为什么语言被设计成这样?
可能的一个原因是使这些情况更加明显区分。
int ** p;
delete[] p
delete p[1];
如果是delete p[]
,那么一个字符的错误就会产生相当严重的后果。[]
中元素的数量。 - James Kanzedelete p[4]
会有歧义。 - GManNickGdelete []p[1];
也是有效的,编译器必须知道程序员的意图! - Ajay