このコンテキストでT
は、特定のタイプでありallocator
、そのタイプのアロケータオブジェクトです。デフォルトではそうですstd::allocator<T>
が、これは必ずしも正しいとは限りません。
によって取得されたメモリのチャンクがありますallocator.allocate(n)
。オブジェクトのコンテナもcon
ありT
ます(たとえば、std::vector<T>
)。T
そのメモリのチャンクをオブジェクトで初期化したい。
メモリのチャンクの場所はに保存されT* data
ます。
これらの2つのコード例は常に同じですか?
#include <memory>
// example 1
std::uninitialized_copy(con.begin(), con.end(), data)
// example 2
std::vector<T>::const_iterator in = con.begin();
for (T* out = data; in != con.end(); ++out, ++in) {
allocator.construct(out, *in);
}
そして、これらの2つについては?
#include <memory>
T val = T(); // could be any T value
// example 3
std::uninitialized_fill(data, data + n, val)
// example 4
for (T* out = data; out != (data + n); ++out) {
allocator.construct(out, val);
}