このコンテキストで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);
}