c++ - 使用后需要删除 CString 以释放内存吗?

标签 c++ visual-c++ mfc cstring

如果我使用这样的 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"); 

最佳答案

newheap 上分配内存,所以

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/

相关文章:

c++ - 无法使用 istream C++ 重载 >> 运算符

c++ - 将 MFnParticleSystem 添加到代码时,Maya 应用程序代码将无法编译

c++ - 使用 () 创建类的实例

visual-studio - Visual Studio 2010 中的网络仿真?

c++ - 添加 #include <boost/thread/mutex.hpp> 会破坏我的 ActiveX 控件吗?

c++ - 为什么在 MFC 中收到错误消息而不是定时器消息?

c++ - 如何从 HBITMAP 获取 RGBQUAD?

c++ - exe和dll共享同一个静态库

c++ - 从串口mfc读取信息

c++ - 不使用 USES_CONVERSION 的任何副作用