C++ 如何重载新操作符来实现类的快速分配器?
1,我已经有了这样一个快速分配器: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); }
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); }
};