std::uninitialized_copy 和 std::copy 的区别?
Difference between std::uninitialized_copy & std::copy?
std::uninitialized_copy
和 std::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
在处理要复制到未初始化存储的范围时,简单地实现上述代码片段的范围版本。
std::uninitialized_copy
和 std::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
在处理要复制到未初始化存储的范围时,简单地实现上述代码片段的范围版本。