1

スマートポインタとメモリ割り当てに関するジレンマがあります。C++ - スマートポインタとカスタムメモリ割り当てジレンマ

私のスマートポインタクラスでは、自分のエンジン内のメモリモジュールを通して私自身の割り当てメモリを持っています。私は私のエンジンをDestroy()したいとき

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

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

は今、私は同様に解放されたのすべてのメモリをしたいです。これは、まずエンジンに関連するすべてのメモリをクリーンアップしたいからです。また、mObjのクリーンアップは、メモリプールを使用してメモリを割り当てたり割り当てを解除したりするメモリマネージャを使用しているため、割り当て不可能なメモリへ。

私はスマートなポインタで足に自分自身を撃ったのですか?これを解決するスマートな方法はありますか?

+0

おそらく、問題を示す自立型プログラムが役立つでしょう。 –

答えて

6

なぜですか?実際、スマートポインタをカスタムメモリ管理と混在させるのが一般的な方法です。 std::shared_ptr(またはboost::shared_ptr)はカスタムディテクタをサポートしていますが、リファレンスカウントポインタには通常、それらを解放するために呼び出される仮想メソッドがあります。

参照エンジンのようなものを使用している間はエンジンを破壊することはできませんオブジェクト。その目的のために、人々は通常、 "エンジン"を参照カウントポインタにします。サイクリック依存関係に注意してください。

...力をあなたと一緒にしましょう!

関連する問題