如果我使用这样的 CString:
void myFunc(char *str)
{
CString s(str);
// Manipulate other data with CString
// ...
// Finished
// Should I somehow delete 's' here to avoid a memory leak?
}
一旦函数超出范围,字符串是否被删除?
另外,我知道new
关键字分配内存,如果我构造一个没有new
关键字的对象,是否仍然分配内存?我的直觉告诉我是的,但我想验证一下。
例如
CString *asdf = new CString("ASDF");
// same as?
CString asdf("ASDF");
最佳答案
new
在heap 上分配内存,所以
CString *asdf = new CString("ASDF");
在堆上分配一个 CString
并将指向它的指针分配给 asdf
。在您调用 delete asdf
之前,不会释放该内存,也不会调用 asdf
的析构函数。
如果没有 new
,您将在堆栈 上进行分配,所以
CString asdf("ASDF");
分配栈内存,asdf
代表。当堆栈展开时(就像从函数返回时一样),此内存会自动回收,并且 asdf
的析构函数会在超出范围时自动调用。
此外,CString
会清理它自己的资源,因此如果 CString
对象被清理(如果它在堆栈上则超出范围,或者如果它在堆栈上则被删除堆),它使用的资源也将被清理。
关于c++ - 使用后需要删除 CString 以释放内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937421/