- 论坛徽章:
- 2
|
回复 #1 notcat 的帖子
void* operator new(std::size_t, const char*, long);
void* operator new[](std::size_t, const char*, long);
#define new new (__FILE__, __LINE__)
会导致:
T* t = new T;
T* a = new T;
被扩展为:
T* t = new (__FILE__,__LINE__) T;
T* a = new (__FILE__,__LINE__) T;
"(__FILE__,__LINE__)" 这部分被称为new-placement语法。
它将引起对:
void* operator new(std::size_t, const char*, long);
void* operator new[](std::size_t, const char*, long);
的调用。
然后, 实现:
void* operator new(std::size_t, const char*, long);
void* operator new[](std::size_t, const char*, long);
这2个函数的家伙, 就得到一个hook的机会, 以及分配点的文件名与行号。 |
|