使用内存池放置新内容

时间:2013-05-24 23:50:31

标签: c++

我最近阅读过有关新版本的内容,我想在其中一项作业中使用它。我不允许使用stl容器,所以我想制作一个像容器的矢量。 因此,假设我预先在数组中分配10个插槽来存储我的对象,然后用户添加11个项目。我怎么能使用placement new来存储前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;
}

在这个地方,我想添加使用新的放置。

1 个答案:

答案 0 :(得分:1)

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++ placement new