代码之家  ›  专栏  ›  技术社区  ›  varnie

运算符新建/删除和类层次结构

c++
  •  2
  • varnie  · 技术社区  · 15 年前

    假设我们有类的层次结构,我们希望让它们只在整个内存管理器中分配/取消分配它们的内存。什么是经典C++方式来实现这种行为? 是一个 必须 进行额外检查,如:

     class Foo{  
      public:  
      virtual ~Foo(){}  
      void* operator new(size_t bytes)  
      {  
        if (bytes != sizeof(Foo)){  
            return ::operator new(bytes);
        }    
        return g_memory_manager.alloc(bytes);  
      }  
      void operator delete(void *space, size_t bytes)  
      {  
        if (bytes != sizeof(Foo)){  
            return ::operator delete(space);  
        }  
        g_memory_manager.dealloc(space, bytes);  
      }  
    }
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Matthieu M.    15 年前

    不,不用检查。

    看看亚历山德里斯科的洛基 SmallObject allocator 你只是继承了小物件,它为你做了所有的重担!

    不要忘记重载所有版本的new和delete:

    • 简单版本
    • 数组版本
    • 放置版本

    否则你可能会遇到一些麻烦。

        2
  •  0
  •   Test    15 年前

    我的评论:

    让创建者做这些事情,例如:

    template<class t>
    struct creator_new { // a creator using new()/delete()
        static t *Create(void) 
        {
            return new t;
        }
        static void Destroy(t *p) 
        {
            delete p;
        }
    };
    

    您可以扩展创建者来检查内存泄漏,或者使用内存池来管理对象等。