C++ uninitialized_copy的问题

图片描述

图片描述

我只有5个元素,
即 size()/2=2
每个栈的长度是2
a拷贝了 0 1两个元素
b拷贝 2 3两个元素
为什么第五个元素 《5》,会被拷贝到b的栈内部, 2 3已经占满栈的空间,此时并没有扩展空间
还有我这个是移动的迭代器,移动后元素应该是未定义的,可是为什么 还是能输出1 2 3 4 5
元素类型是int

回答:

为什么第五个元素 《5》,会被拷贝到b的栈内部, 2 3已经占满栈的空间,此时并没有扩展空间

你要求拷贝 3 个元素,自然会拷贝 3 个。uninitialized_copy 并不知道你的目标空间用完了。

先未分配的内存写,这是未定义行为,未定义行为,什么都可能发生。

还有我这个是移动的迭代器,移动后元素应该是未定义的,可是为什么 还是能输出1 2 3 4 5

移动后的元素,一般会处于一个 合法但不确定 的状态,并不是未定义的。你不能依赖的它还是原值(也许某个实现就不是原值了),但是它一定有一个合法的值,也许是原值,也许不是。

以上是 C++ uninitialized_copy的问题 的全部内容, 来源链接: utcz.com/p/192382.html

回到顶部