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)支持定製刪除,引用計數指針通常被稱爲釋放一些虛擬方法等

你不能,然而,當別的東西是用它的部分,就像那些引用摧毀引擎對象。爲此,人們通常將「引擎」作爲引用計數指針。只要注意循環依賴。

...讓力量與你同在!