free() されたときにオブジェクトのメモリを実際に解放しないが、それをキューに保持し、新しいオブジェクトが要求された場合に以前に割り当てられたオブジェクトを返すジェネリック アロケータ クラスを作成しようとしています。さて、私の頭を包み込めないのは、アロケーターを使用するときにオブジェクトのコンストラクターに引数を渡す方法です (少なくとも、可変個引数テンプレートに頼ることなく)。私が思いついた alloc() 関数は次のようになります。
template <typename... T>
inline T *alloc(const &T... args) {
T *p;
if (_free.empty()) {
p = new T(args...);
} else {
p = _free.front();
_free.pop();
// to call the ctor of T, we need to first call its DTor
p->~T();
p = new( p ) T(args...);
}
return p;
}
それでも、今日の C++ (および可変個引数テンプレートをサポートしない古いバージョンの GCC) と互換性のあるコードが必要です。オブジェクトコンストラクターに任意の量の引数を渡す方法は他にありますか?