我认为这char* = "string"
是相同的char* = new char[6]
.我相信这些字符串是在堆而不是堆栈上创建的.因此,当我使用它们或者它们被自己摧毁时,我是需要销毁它们还是释放它们的记忆?
Mik*_*aid 31
不需要.当您使用malloc
函数(在C中)或new
运算符(在C++中)自己手动分配内存时,您只需手动释放字符串.如果不使用malloc
或new
,那么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)
只有在后一种情况下才在堆上分配内存.所以当你完成后你会打电话给删除.
游戏的名称是“只摧毁你创造的东西”。以下是这些对:
malloc
/free
calloc
/free
new
/delete
new []
/delete []
由于您使用 创建了第二个字符串new []
,因此您有责任使用 销毁它delete []
。delete [] string2
完成后打电话。
现在,如果您的代码足够复杂并且难以跟踪删除,请考虑使用作用域指针或自动指针。boost 库中的类boost::scoped_ptr
是一个很好的起点。还要研究一下RAII惯用语,非常方便且有用的东西。