c++ - std::uninitialized_copy 和 std::copy 之间的区别?

标签 c++ memory

std::uninitialized_copystd::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/

相关文章:

c++ - Linux 可执行文件作为共享库

C++:未初始化的变量垃圾

push_back 到静态 vector 后的 C++ 释放

c++ - C++ 编译器如何优化堆栈分配?

python - 我的素数程序中的指数抛出内存错误,我该如何解决?

c++ - 从服务器收到的 Wt FastCGI 不完整 header (0 字节)

c++ - 有关调试复制和粘贴到 PowerPoint 2010 的提示

c++ - 如何使用 OpenCV 图像蒙版

c++ - 在 Opengl 中渲染。重叠对象

java - 我应该如何管理移动音频混合软件的内存?