Подтвердить что ты не робот

Разница между std:: uninitialized_copy & std:: copy?

В чем разница между std::uninitialized_copy и std::copy и когда следует использовать какой?

4b9b3361

Ответ 1

Допустим, вы выделили некоторую память в куче через malloc и указали на нее указатель T* p. В итоге вы получаете неинициализированное хранилище, потому что все malloc - это отметка местоположения того размера, который вы запросили как выделенного (new, с другой стороны, фактически создает объекты и, таким образом, делает выделенное выделенное облако хранилищем). Поскольку ячейка памяти, начинающаяся с p, не имеет действительного объекта типа T, сидящего там, вы не можете сделать это

T a;
*p = a;

поскольку для вызова оператора присваивания не существует объекта типа T at p. Вместо этого вы создадите объект типа T в местоположении p, используя размещение new:

T a;
new (p) T{a};

std::uninitialized_copy просто реализует версию диапазона вышеуказанного фрагмента кода при работе с диапазоном, который вы хотите скопировать в неинициализированное хранилище.