2009-08-11 34 views
0

私はGDI +で作業しようとしていますが、私は奇妙なメモリリークに遭遇しています。私はvectorGdiplusBaseポインタを持っていて、それらのすべてが動的に作成されています。奇妙なことは、例えば、GdiplusBase *としてポインタを削除すると、GDI +がメモリをリークしますか?

vector<GdiplusBase*> gdiplus; 
gdiplus.push_back(new Image(L"filename.jpg")); 
delete gdiplus[0]; 

、しかし、私はGdiplusBaseポインタとしてオブジェクトを削除しようとするということで、あるオブジェクトが削除されず、メモリリーク(タスクマネージャによります)。ただし、元のポインタにキャストして削除すると、

delete (Image*)gdiplus[0]; 

オブジェクトが正しく削除されます。これについての奇妙なことは、私が知る限り、(MSDNによると)GdiplusBase is the base class of all GDI+ objects and owns the delete operators for all of themです。その場合、delete gdiplus[0];が正しく動作し、メモリを解放しないでください。私はここで何か悪いことをしていますか?

答えて

0

GdiplusBaseには仮想デストラクタがないので、deleteを呼び出すとデストラクタは呼び出されないと思います。 Imageのデストラクタは他のリソース(ビットマップハンドルなど)をリリースする可能性があります。そのため、Imageオブジェクト自体のメモリは正しく解放されますが、使用中の他のリソース(メモリを消費する可能性があります)は解放されません。

関連する問題