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

cod*_*ash 33 c++ memory

应该使用哪个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 在处理要复制到未初始化存储的范围时,只需实现上述代码段的范围版本.

  • @MattMcNabb不,`uninitialized_copy`会另外调用在目的地创建的对象的构造函数,因为放置了`new`. (5认同)
  • 你的回答钉了它,删除我的,+1. (3认同)
  • @MattMcNabb只有当它们可以轻易复制时才会成真,AFAIK. (2认同)