[C/C++]_[初级]_[关于Gdiplus::Bitmap使用的注意事项]

场景

1.我们一般使用 Gdiplus::Bitmap 来存储图像数据, 使用shared_ptr来对 Gdiplus::Bitmap 进行封装, 达到使用引用计数共享图像对象, 减少内存占用的目的.

2.偶尔的时候如果 Gdiplus::Bitmap 使用不当释放时会出现崩溃错误, 什么原因呢?

说明

1.原因是 Gdiplus::Bitmap* 不可以在 Gdiplus::GdiplusShutdown 调用后再 delete, 不然会崩溃.

2.崩溃位置, 可见在调用delete bitmap对象时崩溃.


private:
    virtual void _Destroy()
        {   // destroy managed resource
        delete _Ptr;
        }

[C/C++]_[初级]_[关于Gdiplus::Bitmap使用的注意事项]_第1张图片

例子


// test-gdiplus.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 
#include 
#include 

std::vector<std::shared_ptr> gImages;


int _tmain(int argc, _TCHAR* argv[])
{
    ULONG_PTR m_gdiplusToken;
    Gdiplus::GdiplusStartupInput  m_gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplusToken,&m_gdiplusStartupInput,NULL);

    // 创建 Bitmap
    auto bitmap = new Gdiplus::Bitmap(200,200);
    gImages.push_back(std::shared_ptr(bitmap));

    Gdiplus::GdiplusShutdown(m_gdiplusToken);

    return 0;
}


你可能感兴趣的:(系统平台,gdiplus,Windows,C++,delete,崩溃)