我正在编写自己的空闲列表内存分配器,该内存分配器专门用于游戏引擎中的组件初始化,以便避免使用“ new”运算符来提高性能。
所以这是代码的简短版本。问题出在注释行。有没有一种方法可以直接使用已分配的内存,而不是分配新的内存位置,然后将其复制到现有的内存位置?
template<typename... Args>
T* allocate(Args... params) {
if (tail == nullptr) {
return ::new(T);
}
auto rlt = tail;
if (tail->r.pre == nullptr) tail = nullptr;
else {
tail->r.pre->r.next = nullptr;
tail = tail->r.pre;
}
auto vT = reinterpret_cast<T*>(rlt);
*vT = T(std::forward<Args>(params)...); // <- this will call both constructor and copy operator
return vT;
};