zoukankan      html  css  js  c++  java
  • [百度空间] [原] 全局operator delete重载到DLL

    由于很久没有搞内存管理了,很多细节都忘记了
    今天项目要用到operator delete重载到DLL,发现了问题,网上搜索以后,再对比以前写的代码,发现了问题:
    原来MSVC默认的operator new(size_t) 和operator delete(void*)虽然可以重载,

    但是不能封装到DLL中,编译会报C2375 DLL linkage错误,解决方法很简单: 用inline函数包一下DLL导出就可以了


    同时为了不跟MFC等三方库的operator new 冲突,最好加一个自定义参数:
    typedef strcut SMemInfo {}MEMINFO;

    #if XXXDEBUG
    extern DLL_ENTRY void* operator new(size_t size, const char* file, int line, const MEMINFO* dummy);

    extern DLLENTRY void operator delete(void* ptr,const char* file, int line,  const MEMINFO* dummy);//匹配版本用于exception

    inline void operator delete(void* ptr)

    {

       return ::operator delete(ptr,__FILE__,__LINE__, (const MEMINFO*)NULL);

    }

    #else

    extern DLL_ENTRY void* operator new(size_t size, const MEMINFO* dummy);

    extern DLLENTRY void operator delete(void* ptr,const MEMINFO* dummy);//匹配版本用于exception

    inline void operator delete(void* ptr)

    {

       return ::operator delete(ptr, (const MEMINFO*)NULL);

    }

    #endif

  • 相关阅读:
    JQuery Ajax使用及注意事项
    边框叠加
    AngularJS的相关应用
    JS基础,你需要掌握的要点!
    JS基础部分小结
    JS的Dom树小结
    JQuery事件与动画
    HTML
    项目
    BZOJ4851: [Jsoi2016]位运算
  • 原文地址:https://www.cnblogs.com/crazii/p/4512790.html
Copyright © 2011-2022 走看看