基本上,我试图找出Gdiplus :: Bitmap *是否不为NULL(或0)。如果是这样,请将其删除,然后在适当位置创建一个“新的Gdiplus :: Bitmap()”。我正在尝试这样做,以防止将来发生任何内存泄漏。
我已经尝试了很多事情,如果我创建位图然后调用delete,它可以正常工作(减去null检查)。
// private
Gdiplus::Bitmap* last_frame_bmp;
// public
foo::foo() {
if (last_frame_bmp != NULL) { delete last_frame_bmp; }
last_frame_bmp = new Gdiplus::Bitmap(100, 100, PixelFormat32bppPARGB);
}
崩溃,我的意思是,程序挂起且无法启动。
有任何想法吗?
最佳答案
好吧,您的测试是错误的方法-如果它为null,则只删除它。在任何情况下,delete
空指针都是完全安全的;它没有任何作用,所以如果完全没有这种状况,您会变得更好。
但是无论如何,没有一个好的C ++代码会执行显式的delete
。我们有聪明的指针为我们做到这一点。
崩溃是因为您破坏了其他地方的内存-我认为这是显式的new
和delete
过多。