1,我已经有了这样的快速分配器:
struct FastAllocator
{
FastAllocator(size_t fixed_size);
void* Allocate(size_t size);
void Free(void* ptr);
};
2,我还有一个需要动态分配/删除的A类。所以我想到在类A的定义中重载operator new
和operator delete
是这样的:
struct A
{
int buf[1024];
void* operator new(size_t size);
void operator delete(void* ptr);
};
3,因为operator new
和operator delete
都是静态方法,因此我无法访问this
指针。
4,我的问题是:我应该如何初始化FastAllocator
和operator new
可以访问的operator delete
个实例?
答案 0 :(得分:3)
您可以为FastAllocator
创建一个可识别类型的包装器。
template <typename T>
class FastAllocatorByType {
static FastAllocator & fa () {
static FastAllocator fastalloc(sizeof(T));
return fastalloc;
}
public:
static void* Allocate(size_t size) { return fa().Allocate(size); }
static void Free(void* ptr) { fa().Free(ptr); }
};
然后,new
和delete
重载可以调用包装器。
struct A
{
typedef FastAllocatorByType<A> FastAlloc;
int buf[1024];
void* operator new(size_t size) { return FastAlloc::Allocate(size); }
void operator delete(void* ptr) { FastAlloc::Free(ptr); }
};