1

私は最近、新しい配置について読みました。私の課題の 1 つでそれを使用したいと思います。stl コンテナーの使用が許可されていないため、ベクターのようなコンテナーを作成したいと考えています。オブジェクトを格納するために配列に 10 個のスロットを事前に割り当ててから、ユーザーが 11 個の項目を追加するとします。配置 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;
}

その代わりに、placement new の使用を追加したいと思います。

4

1 に答える 1

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++ の配置も参照してください。

于 2013-05-24T23:53:21.873 に答える