2

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

struct FastAllocator
{
    FastAllocator(size_t fixed_size);
    void* Allocate(size_t size);
    void  Free(void* ptr);
};

2、我还有一个需要快速动态分配/删除的A类。所以我想到重载operator newoperator delete类 A 的定义是这样的:

struct A
{
    int buf[1024];

    void* operator new(size_t size);
    void  operator delete(void* ptr);
};

3、因为operator newoperator delete都是静态方法,所以不能访问this指针。

4、我的问题是:我应该如何初始化FastAllocator可以被operator newand访问的 's 实例operator delete

4

1 回答 1

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); }
};

然后,newanddelete重载可以调用包装器。

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); }
};
于 2013-08-27T02:18:27.333 回答