我试图跟踪内存泄漏,并认为为此创建一个简单的设备会很好,所以我做到了。

struct alloc_t
{
};
extern alloc_t g_Alloc;

inline
void* operator new (size_t size, alloc_t, const char* file, int line)
{
    return _malloc_dbg(size, _NORMAL_BLOCK, file, line);
}

然后,我使用宏将其扩展为这种特定的重载,如下所示:
#define DEBUG_NEW new (g_Alloc, __FILE__, __LINE__)

虽然,我必须在某处定义g_Alloc,但我认为有一种更好的方法可以确保重载分辨率得到保证,但无需使用struct。但是,我要确保enumtypedef在不与void*int混淆的情况下可以满足什么程度的要求?

另外,有人能从经验中说出g_Alloc的正确性会对如此严重的服务器产生什么影响,或者如果编译器在完成重载解析后才将其删除,它会产生什么影响?

最佳答案

借助@ipc的注释,我进行了此调整,该调整基本上相同,但具有const限定符和按引用传递。这也与nothrow的新重载使用的技巧相同,当C++中的分配失败时,nothrow允许您不获取异常(我不知道)。

struct alloc_t
{
};
extern const alloc_t g_Alloc;

inline
void* operator new (size_t size, const alloc_t&, const char* file, int line)
{
    return _malloc_dbg(size, _NORMAL_BLOCK, file, line);
}

关于c++ - C++强制特定的过载解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14234792/

10-12 20:42