20
std::uninitialized_copy
和std::copy
有什么区别?我应该在什么时候使用哪一个?std :: uninitialized_copy和std :: copy之间的区别?
std::uninitialized_copy
和std::copy
有什么区别?我应该在什么时候使用哪一个?std :: uninitialized_copy和std :: copy之间的区别?
比方说你已经通过malloc
在堆上分配了一些内存,并且有一个指针T* p
。您最终会得到未初始化的存储,因为所有malloc
都会将您请求的大小标记为分配的位置(另一方面,new
实际上构造对象并因此使分配的区域初始化存储)。由于从p
开始存储位置没有T
坐在那里类型的有效对象,你不能因为是在p
没有T
类型的对象调用赋值运算符上做到这一点
T a;
*p = a;
。相反,你将有一个构造T
类型的对象在位置p
使用placement new
:
T a;
new (p) T{a};
std::uninitialized_copy
与您要在复制到未初始化的存储范围打交道时,简单地实现了上面的代码片断的范围版本。
你的答案指甲,删除我的,+1。 – vsoftco
'uninitialized_copy'与'memcpy'完全等价吗? –
@MattMcNabb这只有在它们可以复制的情况下才是真的,AFAIK。 – Pradhan