是否需要销毁char*="string"或char*= new char [6]?

Mal*_*har 14 c++ memory

我认为这char* = "string"是相同的char* = new char[6].我相信这些字符串是在堆而不是堆栈上创建的.因此,当我使用它们或者它们被自己摧毁时,我是需要销毁它们还是释放它们的记忆?

Mik*_*aid 31

不需要.当您使用malloc函数(在C中)或new运算符(在C++中)自己手动分配内存时,您只需手动释放字符串.如果不使用mallocnew,那么char*将在堆栈上创建或作为编译时常量.


小智 17

不,当你说:

const char* c = "Hello World!";
Run Code Online (Sandbox Code Playgroud)

您将c分配给"预先存在的"字符串常量,该常量与以下内容不同:

char* c = new char[6];
Run Code Online (Sandbox Code Playgroud)

只有在后一种情况下才在堆上分配内存.所以当你完成后你会打电话给删除.


Fan*_*c23 5

游戏的名称是“只摧毁你创造的东西”。以下是这些对:

  1. malloc/free
  2. calloc/free
  3. new/delete
  4. new []/delete []

由于您使用 创建了第二个字符串new [],因此您有责任使用 销毁它delete []delete [] string2完成后打电话。

现在,如果您的代码足够复杂并且难以跟踪删除,请考虑使用作用域指针或自动指针。boost 库中的类boost::scoped_ptr是一个很好的起点。还要研究一下RAII惯用语,非常方便且有用的东西。