因为原先自己写过一套可以检测 memory leak/overflow 的内存分配模块,觉得不错
但用在MFC工程的时候, 发现不能重载全局的operator new...
link的出现如下错误Linking...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in gditest.obj
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in gditest.obj
../../bin/gditest.exe : fatal error LNK1169: one or more multiply defined symbols found
怎么让系统不链上MFC的operator new的实现, 而是忽略用我的?vs2003的工程如何设置?

解决方案 »

  1.   

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif#define DEBUG_NEW new(__FILE__, __LINE__)
    大概是这个样子其中那个 #define new DEBUG_NEW 我已经被注释掉了。问题是:
    mfc 的 lib 中, 有一套
    void* operator new(size_t);
    void* operator new(size_t, const char*, int);
    的实现我的代码里面也有一份实现
    我想最终link到我的代码的export symbols中去,
    而不是afxmem.obj里面的。
    如果屏蔽某个系统的symbol, 我记得原来有人搞过,
    d但不记得怎么用的。
      

  2.   

    #ifdef new
    #undef new
    #endif
      

  3.   

    #pragma push_macro("new")// 定义使用你的new#pragma pop_macro("new")