先ほどCArray CListのメモリ開放に関して(1)を投稿した者です。
VC++にて先ほどの自作クラスCLとは無関係な適当な関数内で以下を実行
した結果、③-1だとVSからメモリーリークがあったと言われないのですが
③-2だとメモリーリークがあると言われます。
CArrayですからRemoveAllと思いきや、newだからdeleteしないといけない
ようです。
そこで、
③ ③-1だとOKで③-2だとNGな理由を教えて頂けないでしょうか。
④私が良くわかってないせいか、こちらの投稿ではdelete x;でOKなのに
投稿「CArray CListのメモリ開放に関して(1)」ではdelete x;で強制終了
される理由が良くわかりません。
また、RemoveAllでケリがつかない理由も教えて頂けないでしょうか。
⑤VSのデバッカーからメモリーリークを指摘された場合はリークがあり、
指摘されない場合はリークはないと信じても問題ないでしょうか。
以下適当な1つの関数内にて記述
CArray <double, double> *x = new CArray <double, double>;
for (int i = 0; i < 10; i++){
x->Add(i);
}
delete x; //③-1これだとメモリーリークを指摘されない
// x->RemoveAll(); //③-2この場合メモリーリーク
new CArray で箱を作り
Add で箱に中身を入れ
RemoveAll で箱の中身を捨てる
だけだと、箱が残る、すなわちリーク。
箱も捨ててよい・捨てるべきなら delete が必要。
tetrapodさん>
ご回答有難うございます。
本件に関しては中身と箱の両方を捨てることで
了解致しました。有難う御座います。
今動作確認しましたが、ご指摘のように
x->RemoveAll();
delete x;
か
delete x;
ならばメモリーリークしないようです。
しかし、上記ですべて完結すれば納得できるのですが
投稿(1)のほうでは CL::~CL()デストラクタ内で
同様の定義をしても強制終了されてしまい良くわからない
状況です。基本的な質問かもしれませんが宜しくお願い致します。
本件「CArray CListのメモリ開放に関して(1)」にて解決致しました。
ありがとうございました。