私は練習用のアプリケーションを書くのに少し時間を費やし、何かを削除するのを忘れた場合に備えてメモリリークを回避するために、全体を通してスマートポインタを使用するのが好きでした。同時に、例外を使用してコンストラクターの失敗を報告し、それを処理しようとすることも好きです。ただし、それができない場合は、assert()またはexit()を呼び出して、その場所でプログラムを終了したいと思います。ただし、msvcでcrtdbgライブラリを使用すると、動的に割り当てられたスマートポインタからのメモリリークが報告されます。これは私にとって2つのことのうちの1つを意味します。1)スマートポインタが割り当てられた場所の範囲外に出たり、割り当てを解除したりしてメモリリークが発生したり、2)crtdbgがメインで終了しないために割り当て解除をキャッチしなかったりすることはありません。ただし、ページは_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);を使用します。プログラムの開始時に、任意の出口点からのリークをキャッチしますが、それを使用してもメモリリークエラーが発生します。
皆さんへの私の質問ですが、メモリは実際に終了時またはアサート時に割り当て解除されますか?そうでない場合は、std :: shared_ptrから派生して、呼び出しの直前に割り当て解除される動的に割り当てられたオブジェクトをカタログ化する独自のソリューションを実装できますか?終了またはアサートするのですか、それともより単純なソリューションにはあまりにも多くの作業が必要ですか?