1

我对智能指针和内存分配有困惑。智能指针和自定义内存分配困境

在我的智能指针类中,我通过引擎中的内存模块拥有自己的分配内存方式。

template <class T> 
    class Object 
    { 
    public: 
     inline Object() 
     { 
      Init(); 

      if (mEngine) 
      { 
       mObj = (T*) mEngine->GetMemoryManager()->Allocate(sizeof(T)); 
       mRefCount = 1; 
      } 
     } 

现在,当我想我Destroy()发动机,我希望所有的内存释放为好。这首先是因为我想清理与我的引擎相关的所有内存,并且因为清理mObj依赖于我的内存管理器,因为它可能使用内存池来分配/释放内存,并删除内存管理器将导致到不可分配的内存。

那么,我用智能指针拍摄自己的脚?有没有一个聪明的方法来解决这个问题?

+0

也许一个演示问题的独立程序会很有帮助。 – 2012-03-05 21:52:24

回答

6

为什么这么说?实际上,这是一种将智能指针与自定义内存管理混合在一起的常见做法。 std::shared_ptr(或boost::shared_ptr)支持定制删除,引用计数指针通常被称为释放一些虚拟方法等

你不能,然而,当别的东西是用它的部分,就像那些引用摧毁引擎对象。为此,人们通常将“引擎”作为引用计数指针。只要注意循环依赖。

...让力量与你同在!