• 【转载】gdi+ 内存泄漏


    【转载】http://issf.blog.163.com/blog/static/1941290822009111894413472/

    最近用GDI+实现了几个自定义控件,但是发现存在内存泄露问题

    BOOL CGdiplusBugDlg::OnEraseBkgnd(CDC* pDC) 
    {
    Image* pImage = Image::FromFile(L"E:\bac.bmp");
    Graphics g(pDC->m_hDC);

    g.DrawImage(pImage,0,0);

    return TRUE;
    }

     因为没

    delete pImage;

    g.ReleaseHDC(pDC->m_hDC);

    而这两个操作最好加上,否则肯定会泄露!

    就造成了大量的内存泄露。也是奇怪了,在那么多的例子里也都没见去delete gdi+的资源。在网上搜了很久也没有搜到这方面内容。

    最初的时候就觉得gdi+不用释放内存太奇怪了,但又没看见它在哪里new了。Image::FromFile直接返回一个指针也是特别奇怪..但MSDN里中居然也不说要去delete.

    Bitmap 继承 Image, Image继承 GdiplusBase,在GdiplusBase里面发现了一些东西...

    class GdiplusBase
    {
    public:
    void (operator delete)(void* in_pVoid)
    {
    DllExports::GdipFree(in_pVoid);
    }
    void* (operator new)(size_t in_size)
    {
    return DllExports::GdipAlloc(in_size);
    }
    void (operator delete[])(void* in_pVoid)
    {
    DllExports::GdipFree(in_pVoid);
    }
    void* (operator new[])(size_t in_size)
    {
    return DllExports::GdipAlloc(in_size);
    }
    };

  • 相关阅读:
    InitializingBean
    线程池
    maven
    mysql主从库
    zookeeper
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    远程调试
    enum
    注解
    Shell错误[: missing `]'
  • 原文地址:https://www.cnblogs.com/doudongchun/p/3699676.html
Copyright © 2020-2023  润新知