我正在尝试编写一个通用分配器类,它在空闲()时不会真正释放对象的内存,而是将其保存在队列中,如果请求新的对象,则返回先前分配的对象。现在,我无法理解的是如何在使用我的分配器时将参数传递给对象的构造函数(至少不诉诸可变参数模板)。我想出的 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)兼容。有没有其他方法可以将任意数量的参数传递给对象构造函数?