4

Nowによって割り当てられたvectorタイプの内部動的配列を維持するというクラスがあるとします。タイプのを構築し、後で移動セマンティクスを使用して、タイプので消費されるメモリを使用できるようにします。Tstd::allocator<T>.vectorUvectorT

vector<unsigned> u(512);
// Do something with v.
vector<double> t = std::move(u);
// Do something with t.
// Later, t gets destroyed.

のmoveコンストラクタuで'sアロケータによって割り当てられたメモリを使用し、後で' sアロケータを使用して割り当てを解除しても安全ですか?もしそうなら、この操作が安全であることを保証するために私は何をしなければなりませんか?最初に、アロケータを使用して内部配列の各要素を呼び出す必要があると思います。ttallocator.destroy()uu

4

1 に答える 1

2

はい、それはSTLの目的の設計の1つであり、あるアロケータによって割り当てられたメモリを別のアロケータによって割り当て解除することができます。これはlist::splice、アロケータで何もしなくても、コンテナ間で要素を交換できるようにしたかったためです(withなど)。これが(理由の1つ)、ステートフルアロケータを実際に使用できない理由です。

于 2012-01-12T04:59:29.367 に答える