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
在处理要复制到未初始化存储的范围时,只需实现上述代码片段的范围版本。
关于c++ - std::uninitialized_copy 和 std::copy 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30158192/