使用后需要删除CString来释放内存吗?

Chr*_*gis 2 c++ mfc cstring visual-c++

如果我使用这样的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?
}
Run Code Online (Sandbox Code Playgroud)

一旦功能超出范围,字符串是否被删除?

另外,我知道new关键字分配内存,如果构造一个没有new关键字的对象,是否仍然分配了内存?我的直觉告诉我是的,但我想验证.

例如

CString *asdf = new CString("ASDF");
// same as?
CString asdf("ASDF"); 
Run Code Online (Sandbox Code Playgroud)

Sir*_*tor 15

new堆上分配内存,所以

CString *asdf = new CString("ASDF");
Run Code Online (Sandbox Code Playgroud)

分配CString在堆上和指针分配给它asdf.asdf在你打电话之前,不会释放内存,也不会调用析构函数delete asdf.

没有new,你在堆栈上分配,所以

CString asdf("ASDF");
Run Code Online (Sandbox Code Playgroud)

分配堆栈内存,asdf代表.当堆栈展开时(例如从函数返回时)会自动回收此内存,并且当析构函数asdf超出范围时会自动调用析构函数.

另外,CString清理自己的资源,所以如果CString对象被清理(如果它在堆栈上则超出范围,或者如果它在堆上则被删除),它所使用的资源也将被清除.