C ++强制特定的重载决策

时间:2013-01-09 12:02:44

标签: c++ overloading

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

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。但是,我要注意enumtypedef只要在不与void*int混淆的情况下就足够了?

此外,任何人都可以从经验中说,g_Alloc的前置对于如此严重的影响,或者编译器在完成重载解析后是否删除了它?

1 个答案:

答案 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);
}