假設我們有類的層次結構,我們希望使它們只在整個內存管理器中分配/釋放內存。什麼是經典的C++方法來實現這種行爲? 它是一個MUST有額外的檢查,如:運算符new/delete和類層次結構
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);
}
}
感謝大家的澄清。 – varnie 2009-10-22 18:34:21
這些檢查在世界上怎麼可能是不必要的? – sbi 2009-10-23 10:22:35
哦,等等,我想我知道你的意思:如果(且僅當)使用的分配器可以傳遞任意大小的內存塊時,這些檢查是不必要的。我的工作假設一個特定類的分配器只能提供一個大小的塊,因爲這可以實現非常快速的分配/釋放。現在,看看varnie的代碼,我發現他的分配器需要一個大小參數,所以限制似乎不適用。 – sbi 2009-10-23 10:25:57