3

メモリ リークを追跡しようとしていて、これには簡単なデバイスを作成するのがよいと考えたので、これを作成しました。

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ます。ただし、 or と混同せずに or がどの程度十分であるかは確信していenumます。typedefvoid*int

また、経験から、そのプレセンスがg_Allocサーバーに影響を与えるかどうか、またはオーバーロードの解決が完了した後にコンパイラーがそれを削除するかどうかを誰かが言うことができますか?

4

1 に答える 1

0

@ipc のコメントの助けを借りて、この調整を行いました。基本的には同じですが、const 修飾子と参照渡しがあります。これは、C++ で割り当てが失敗したときに例外を取得しないようにする、notrow による新しいオーバーロードで使用されるトリックと同じです (これについては知りませんでした)。

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);
}
于 2013-01-09T12:24:08.020 に答える