如何在给定的内存块中初始化变量?

时间:2019-05-03 18:33:37

标签: c++ pointers memory-management initialization

我正在编写自己的空闲列表内存分配器,该内存分配器专门用于游戏引擎中的组件初始化,以便避免使用“ 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;
};

0 个答案:

没有答案