通过子类化实现C ++内存池

所以我正在研究一种内存池c ++对象的方法,只需要对需要合并的类进行最少的修改。 内存池本身是你可以在任何地方找到的标准品种,但我已经创建了这个类:
  Poolable::Poolable(MemPool& lepool){
     mempool = &lepool;
  }

  Poolable::~Poolable(){
     mempool->returnMemory((char*)this);
  }

  void * Poolable::operator new(size_t size, MemPool& lepool){
     if(!lepool.initialised())
        lepool.initializeBasedOnSize(size);

     return lepool.getMemory(size);

  }

  void Poolable::operator delete(void * p){
     // do absolutely NOTHING
  }
用法:
  class SomeSubclass : public Poolable { /* boring details here */ };
  MemPool thepool(1000);
  SomeSubclass * woot = new(thepool) SomeSubclass(thepool);
我想在delete运算符中放置returnMemory调用(它基本上释放了池的一部分),但是不知道如何从void *参数获取实际池的地址。 相反,我把它放在析构函数中来解决。我认为构造函数强制要求使用池分配类,这意味着破坏总是意味着将分配未分配。 这是第一个可行的解决方案,使用起来非常方便。然而,这样做可能是不好的风格,我很好奇是否有更好的解决方案来解决问题。 有人知道吗?     
已邀请:
另一种方法是使
Poolable::operator new
thepool
分配内存,这样你就可以使用通常的(非位置)
new
语句。在您的解决方案中,用户必须记住,这些对象将通过一些特殊技术进行分配,这些技术会显示太多细节并给用户代码带来太多负担。     

要回复问题请先登录注册