简单的问题:我必须delete
还是delete []
c
?语言重要吗?
char c[] = "hello"
在 c++ 中,这不是动态内存分配。不需要delete[]
。
你的例子基本上是一个捷径:
char c[6]={'h','e','l','l','o','\0'};
C++ 中的规则是,delete[]
无论何时使用new[]
,delete
都使用new
. 如果您不使用new
,如您的示例中所示,则不需要delete
任何东西。
在您的示例中,如果在函数中声明,则数组的六个字节c
分配在堆栈上,而不是堆上。由于这些字节在堆栈上,因此一旦声明它们的函数返回,它们就会消失。
如果该声明在任何函数之外,那么这六个字节将分配在全局数据区域中,并在程序的整个生命周期中一直存在。
当您将某些东西放在堆上时,您会动态分配内存。在这里,您在堆栈上分配变量。如果您使用的是 new 运算符或 malloc 调用,您会将变量放在堆上。
您需要使用 delete (w/new) 或 free (w/malloc) 来释放堆上的内存。当函数/方法返回时,堆栈将被自动释放。
不,数组是在编译时调整大小的。