我正在尝试追踪内存泄漏,并认为为此创建一个简单的设备会很好,所以我做到了。
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
,但我认为有一种更好的方法可以确保重载分辨率是sade但不使用struct
。但是,我要注意enum
或typedef
只要在不与void*
或int
混淆的情况下就足够了?
此外,任何人都可以从经验中说,g_Alloc
的前置对于如此严重的影响,或者编译器在完成重载解析后是否删除了它?
答案 0 :(得分:0)
在@ ipc评论的帮助下,我做了这个调整,它基本上是相同的,但有一个const限定符和pass-by-reference。这也与nothrow 的新重载所使用的技巧相同,它允许您在C ++中分配失败时不会获得异常(我不知道)。
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);
}