我正在尝试使用GDI +,而且我遇到了一个奇怪的内存泄漏。我有vector
个GdiplusBase
指针,所有指针都是动态创建的。但奇怪的是,如果我尝试将对象删除为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];
不应该正常工作并释放内存吗?我在这里做错了吗?
答案 0 :(得分:0)
我认为问题是GdiplusBase
没有虚拟析构函数,因此当你像这样调用delete
时,不会调用析构函数。并且Image
的析构函数可能会释放一些其他资源(例如位图句柄等)。因此,Image
对象本身的内存被正确释放,但它正在使用的其他资源(也可能耗尽内存)不会被释放。