我试图跟踪内存泄漏,并认为为此创建一个简单的设备会很好,所以我做到了。
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
。但是,我要确保enum
或typedef
在不与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/