重载operator new/delete的问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 18:46:30
VC6+XP
我现在在一个工程里需要做内存方面的管理,需要知道分配了哪些内存(地址和大小),所以希望能通过重载全局new/delete的方式实现,之所以是全局的,是因为有很多类,若对每个类都重载自己的new/delete,会很麻烦。我现在希望在原来全局new/delete的基础上多一些我的管理操作,不知道如何实现这种重载呢?
我想到了namespace的方法。
namespace T
{
void *operator new(std::size_t size)
{
void *tmp = operator new(size);
// do my job here
return tmp;
}
void operator delete(void *p)
{
// do my job here
delete p;
}
}

这样可以编译通过。但是若在程序中调用这个new,就不行了
using T::operator new;
int *a = new int;
这样仍然调用的是本身的new,而不是我在名称空间里的
针对这个,各位有什么好的方法吗?

因为这个不是operator new
建议您看看new和operator new的区别
effective c++ 讲的很好
C++ primer也行
另外提醒一下 全局重载后很多库函数的适用可能会遇到奇怪的问题