C++ 如何重载新操作符来实现类的快速分配器?

C++ 如何重载新操作符来实现类的快速分配器?,c++,performance,memory-management,overloading,static-methods,C++,Performance,Memory Management,Overloading,Static Methods,1,我已经有了这样一个快速分配器: struct FastAllocator { FastAllocator(size_t fixed_size); void* Allocate(size_t size); void Free(void* ptr); }; struct A { int buf[1024]; void* operator new(size_t size); void operator delete(void* ptr); }

1,我已经有了这样一个快速分配器:

struct FastAllocator
{
    FastAllocator(size_t fixed_size);
    void* Allocate(size_t size);
    void  Free(void* ptr);
};
struct A
{
    int buf[1024];

    void* operator new(size_t size);
    void  operator delete(void* ptr);
};
2、我还有一个a类,需要快速动态分配/删除。因此,我认为在类A的定义中重载
运算符new
运算符delete
,如下所示:

struct FastAllocator
{
    FastAllocator(size_t fixed_size);
    void* Allocate(size_t size);
    void  Free(void* ptr);
};
struct A
{
    int buf[1024];

    void* operator new(size_t size);
    void  operator delete(void* ptr);
};
3,因为
operator new
operator delete
都是静态方法,因此我无法访问
this
指针


4,我的问题是:如何初始化可由
运算符new
运算符delete
访问的
FastAllocator
实例?

您可以为
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); }
};