配置を使用してクラスをリセットする方法テンプレートから新しい/削除しますか?
-
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...
}
他のヒント
ブーストはプールのライブラリを持っています。ちょうどあなた自身を書くのではなく、彼らを使用する方が簡単かもしれません。
所属していません StackOverflow