配置を使用してクラスをリセットする方法テンプレートから新しい/削除しますか?

StackOverflow https://stackoverflow.com/questions/488874

  •  20-08-2019
  •  | 
  •  

質問

私は、プールマネージャテンプレートクラスを持っています。クラスオブジェクトは、バックプールマネージャに追加されるとき、私は戻って、それが初期状態だと、それをリセットしたいと思います。私はそれはそれはプールマネージャによって与えられ、次回のために完全にリセットされますので、それにplacmentデストラクタとplacmentコンストラクタを呼び出すしたいと思います。私はこの仕事を得るために多くの方法を試みたが、私は困惑します。ここで私が試したものの一例である。

template <class T>
void PoolClass<T>::ReleaseToPool(T *obj)
{
     obj->~T();   //call destructor

     obj->T::T(); //call constructor
     //also tried new (obj)T(); //but this doesn't seem to work either

     //then misc code to add a pointer to the object
     //to my list of available objects for re-use later
}

私は別の構文の束を試したし、どれも動作するようには思えません。コード自体はクロスプラットフォームがそう(mingwのまたはLinuxやMac下)と私はまだ2003対使用しているWindows用のgccを使ってコンパイルする必要があります。

役に立ちましたか?

解決

いかがます:

template <class T>
void PoolClass<T>::ReleaseToPool(T *obj)
{
    obj->~T();                  //call destructor
    obj = new ((void *)obj)T(); //call constructor

    // add a pointer to the object to the list...
}

他のヒント

ブーストはプールのライブラリを持っています。ちょうどあなた自身を書くのではなく、彼らを使用する方が簡単かもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top