假设我们有类的层次结构,我们希望它们只在整个内存管理器中分配/释放它们的内存。什么是实现此行为的经典C ++方法? 是必须进行额外的检查,例如:
class Foo{
public:
virtual ~Foo(){}
void* operator new(size_t bytes)
{
if (bytes != sizeof(Foo)){
return ::operator new(bytes);
}
return g_memory_manager.alloc(bytes);
}
void operator delete(void *space, size_t bytes)
{
if (bytes != sizeof(Foo)){
return ::operator delete(space);
}
g_memory_manager.dealloc(space, bytes);
}
}
答案 0 :(得分:2)
不需要检查。
看看Alexandrescu的Loki的SmallObject allocator,你只是继承了SmallObject,它为你做了所有繁重的工作!
不要忘记重载所有新版本并删除:
否则你可能会有一些麻烦。
答案 1 :(得分:0)
我的评论:
让创作者做这些事情,例如:
template<class t>
struct creator_new { // a creator using new()/delete()
static t *Create(void)
{
return new t;
}
static void Destroy(t *p)
{
delete p;
}
};
您可以扩展创建者以检查内存泄漏,或使用内存池来管理对象等。