std::uninitialized_copy 和 std::copy 的区别?

Difference between std::uninitialized_copy & std::copy?

std::uninitialized_copystd::copy 有什么区别,什么时候应该使用哪个?

假设您已经通过 malloc 在堆上分配了一些内存,并且有一个指针 T* p 指向它。您最终会得到未初始化的存储,因为所有 malloc 所做的只是将您要求的大小的位置标记为已分配(另一方面,new 实际上构造对象,从而使分配的区域初始化存储)。由于从 p 开始的内存位置没有 T 类型的有效对象坐在那里,你不能这样做

T a;
*p = a;

因为 p 上没有 T 类型的对象来调用赋值运算符。相反,您将使用 placement new:

在位置 p 构造一个类型为 T 的对象
T a;
new (p) T{a};

std::uninitialized_copy 在处理要复制到未初始化存储的范围时,简单地实现上述代码片段的范围版本。