当谈到 C++ 中的内存管理时,我是个新手。我读到如果你用new
关键字创建一个类,你必须delete
让对象释放它的内存。我还读到原始类型(例如int
和)是在堆栈上创建的char
,bool
这意味着它们在超出范围时会被删除。
但是用new
关键字创建的原始类型呢?我需要明确调用delete
吗?这些是像类一样在堆上创建的吗?或者由于它们是原始的,它们仍然在堆栈上创建吗?
我问是因为我正在LPTSTR
使用 new 关键字分配 a,但我担心如果我不调用delete
内存将永远不会被释放。这是我的代码,评论中有一个简单的问题:
#include <Windows.h>
#include <tchar.h>
#include <string>
#ifdef _UNICODE
typedef std::wstring Str;
#else // ANSI
typedef std::string Str;
#endif
Str GetWndStr(HWND hwnd) {
const int length = GetWindowTextLength(hwnd);
if (length != 0) {
LPTSTR buffer = new TCHAR[length + 1]; // Allocation of string
GetWindowText(hwnd, buffer, length + 1);
Str text(buffer);
delete buffer; // <--- Is this line necessary?
return text;
} else {
return _T("");
}
}
我需要打电话delete
吗?不久前,我尝试使用GlobalAlloc()
and GlobalFree()
,但是在运行时我收到一条错误消息,说明有关非法修改堆栈的信息,我没有确切的错误消息,因为这是不久前的情况。此外,除了您的回答之外,如果您想给我一些您认为有助于了解更多有关 C++ 内存管理的资源,那就太好了。