新的内存池位置

placement new with memory pools

本文关键字:位置 内存      更新时间:2023-10-16

我最近读到关于位置新,我想在我的一个作业中使用它。我不允许使用stl容器,所以我想做一个像向量的容器。假设我在数组中预先分配了10个槽来存储我的对象,然后用户添加了11个项目。我怎么能使用放置新的存储前10个对象只是通过将它们复制到数组,然后初始化一个新对象,并将其添加到向量?

我当前使用的额外分配空间代码是这样的:

template <class T>
void Vector<T>::allocMem(int objects)
{
    T *_new_data = new T[2*capacity];
    for(int i = 0; i < size(); i++)
    {
        _new_data[i] = _data[i];
    }
    delete [] _data;
    _data = _new_data;
    capacity = 2*capacity;
}

在这个位置,我想添加new的使用。

T *_new_data = (T*)new char[sizeof(T)*2*capacity];
for(int i = 0; i < size(); i++)
{
    new (_new_data + i) T(_data[i]);
}

参见c++位置new