应该使用哪个std::uninitialized_copy和什么时候有什么区别std::copy?
Pra*_*han 41
假设您已经在堆上分配了一些内存,malloc并指向T* p它.您最终会得到未初始化的存储,因为所有这些malloc都标记了您要求分配的大小的位置(new另一方面实际构造对象,从而使分配的区域初始化存储).由于从那里开始的内存位置p没有T坐在那里的类型的有效对象,你不能这样做
T a;
*p = a;
Run Code Online (Sandbox Code Playgroud)
由于没有类型的对象T,在p调用赋值运算符上.相反,您将使用placementT在位置构造一个类型的对象:pnew
T a;
new (p) T{a};
Run Code Online (Sandbox Code Playgroud)
std::uninitialized_copy 在处理要复制到未初始化存储的范围时,只需实现上述代码段的范围版本.