C ++でのメモリ管理に関しては、私はちょっと新しいです。new
キーワードを使用してクラスを作成する場合delete
、オブジェクトのメモリを解放する必要があることを読みました。int
また、char
、、 などのプリミティブ型bool
がスタック上に作成されることも読みました。これは、スコープ外に出ると削除されることを意味します。
new
しかし、キーワードで作成されたプリミティブ型はどうなるでしょうか? 明示的に呼び出す必要がありますdelete
か? これらはヒープのようなクラスで作成されますか? それとも、それらはプリミティブであるため、スタック上に作成されますか?
newキーワードを使ってaを確保しているので質問しているのですが、それを呼ばないとメモリが解放されないのでLPTSTR
はないかと心配です。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++ メモリ管理の詳細を学ぶのに役立つリソースを提供していただければ幸いです。