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

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

本文关键字:std copy 区别 之间 uninitialized      更新时间:2023-10-16

std::uninitialized_copystd::copy之间的区别是什么?何时应该使用哪个?

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

T a;
*p = a;

因为在p处没有类型为T的对象来调用上的赋值运算符。相反,您将在位置p处使用放置new:构造类型为T的对象

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

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