В чем разница между std::uninitialized_copy
и std::copy
и когда следует использовать какой?
Разница между std:: uninitialized_copy & std:: copy?
Ответ 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
просто реализует версию диапазона вышеуказанного фрагмента кода при работе с диапазоном, который вы хотите скопировать в неинициализированное хранилище.