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++ メモリ管理の詳細を学ぶのに役立つリソースを提供していただければ幸いです。