将指针删除为GdiplusBase *时,GDI +会泄漏内存?

时间:2009-08-11 23:58:10

标签: c++ memory memory-management memory-leaks gdi+

我正在尝试使用GDI +,而且我遇到了一个奇怪的内存泄漏。我有vectorGdiplusBase指针,所有指针都是动态创建的。但奇怪的是,如果我尝试将对象删除为GdiplusBase指针,例如,

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

不删除对象并导致内存泄漏(根据任务管理器)。但是,如果我回到原始指针然后删除,

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];不应该正常工作并释放内存吗?我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

我认为问题是GdiplusBase没有虚拟析构函数,因此当你像这样调用delete时,不会调用析构函数。并且Image的析构函数可能会释放一些其他资源(例如位图句柄等)。因此,Image 对象本身的内存被正确释放,但它正在使用的其他资源(也可能耗尽内存)不会被释放。