C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■95399 / 3階層)  C++ サイズ0でnewした場合
□投稿者/ 774RR (814回)-(2020/07/28(Tue) 16:33:06)
うん? その修正は何か的外れな気がする。

コンストラクタ内で T* p=new T[n]; した結果(は普通には nullptr にはならない)を
デストラクタ内で delete[] p; する分には何一つ規格違反していないしメモリリークしてないよ
たとえ n==0 であっても

n=0; のとき T* p = new T[n]; した結果を if (n!=0) delete[] p; しているのだとしたら
それはメモリリークだけど。

delete nullptr や delete[] nullptr は「何もしない」と決まっているので
JIS X 3014:2003 5.3.5 の 2
delete[] 前の NULL チェックもいらない。

おかしい方向に舵を切る前に本当に発生している事象の正しい確認が必要そう。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: C++ サイズ0でnewした場合 /az →Re[4]: C++ サイズ0でnewした場合 /az
 
上記関連ツリー

C++ サイズ0でnewした場合 / az (20/07/28(Tue) 14:06) #95391
Re[1]: C++ サイズ0でnewした場合 / 774RR (20/07/28(Tue) 15:30) #95394
  └ Re[2]: C++ サイズ0でnewした場合 / az (20/07/28(Tue) 16:19) #95398
    └ C++ サイズ0でnewした場合 / 774RR (20/07/28(Tue) 16:33) #95399 ←Now
      └ Re[4]: C++ サイズ0でnewした場合 / az (20/07/29(Wed) 11:47) #95409
        └ Re[5]: C++ サイズ0でnewした場合 / 774RR (20/07/29(Wed) 13:11) #95410
          └ Re[6]: C++ サイズ0でnewした場合 / 774RR (20/07/29(Wed) 15:41) #95414

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信