タイトル通りでTCHARのnewとdeleteについて素朴な疑問です。
(C++は数年前に入門したばかり)
まずDWORD型は
LPDWORD a = new DWORD;
LPDWORD b = new DWORD[100];
でメモリを確保して
delete a;
delete[] b;
ですよね。
ではTCHAR型は
LPTSTR c = new TCHAR;
LPTSTR d = new TCHAR[100];
でメモリを確保して
delete c;
delete[] d;
となるのでしょうか?
つまり「d」を「delete d;」としてはいけないのか?
今までコンパイル・エラーがなかったので疑問に思わなかった。
しかし、まずいプログラミングをして来たのかな〜と。
どちらが正しいのかC++に詳しい方にお聞きしたいです。
よろしくお願いします。
シ785 ]
LPTSTR = TCHAR *です。
なので,delete [] d;としないといけません。
配列オブジェクトをdeleteした場合は未定義の振る舞いなので,
コンパイラがコンパイルエラーにする必要はありません。
なので,自分で注意する必要があります。
なお,LPTSTRはナル文字終端文字列なので,
LPTSTR c = new TCHAR;
は通常あり得ません。
cが0以外に設定できなくなるためです。
# 設定してもよいが,型の意味とずれるのでバグの元になる。
> LPTSTR = TCHAR *です。
> なので,delete [] d;としないといけません。
やはり、そうなりますね。
> 配列オブジェクトをdeleteした場合は未定義の振る舞いなので,
> コンパイラがコンパイルエラーにする必要はありません。
未定義でしたか。
YuOさん。
ありがとうございました。
ツイート | ![]() |