【发布时间】:2020-03-29 04:36:53
【问题描述】:
c++ 新手在这里。我很难理解这两种方法之间的区别。 在这种情况下,“就地”是什么意思。文档http://www.cplusplus.com/reference/memory/uninitialized_copy/
与算法复制不同,uninitialized_copy 构造对象 就地,而不是仅仅复制它们。
我在看书Accelerated C++ by Andrew Koenig and Barbara E. Moo,解释差异的时候也显得有些含糊
uninitialized_copy 函数的操作类似于库副本 function [...] 它假定目标范围包含原始存储,而不是 已经持有值的元素。
但是如果你在一块已经包含元素的内存上调用unitialized_copy会发生什么?我已经尝试过了,它似乎工作得很好,但我确信有两个不同的功能是有充分理由的,我想知道这是什么原因。
【问题讨论】:
-
从the Possible Implementation given here 看来,它在给定存储上使用placement new 而不清理任何已经存在的东西。如果该存储中有任何有效对象,它们会被覆盖而不会被销毁。没有析构函数,没有 RAII,没有清理。很可能泄漏-城市。
-
对于它的价值,cplusplus.com 在这里以不是一个好的来源而闻名。 cppreference.com 通常被认为更好。
-
@user4581301 我认为这一定是真的,但我觉得奇怪的是,文档中没有明确提到这是关键的区别。
-
@BorisLipschitz 之类的,这个答案是否暗示
copy将调用现有内存对象上的赋值构造函数......而 uninitialized_copy 将调用复制构造函数?
标签: c++