【发布时间】:2021-12-23 22:40:17
【问题描述】:
是否可以安全地假设在使用移动构造函数将双端队列移动到另一个后,我必须指向 std::deque 内的元素的任何指针仍然有效?
对于std::vector,我看不出有什么理由不这样做,但我对std::deque 不够熟悉,无法确定我可以做出同样的假设。
【问题讨论】:
-
不要假设;阅读文档。
是否可以安全地假设在使用移动构造函数将双端队列移动到另一个后,我必须指向 std::deque 内的元素的任何指针仍然有效?
对于std::vector,我看不出有什么理由不这样做,但我对std::deque 不够熟悉,无法确定我可以做出同样的假设。
【问题讨论】:
指向元素的指针仍然有效。 move construction之后:
在容器移动构造(重载 (8))之后,指向 other 的引用、指针和迭代器(除了结束迭代器)仍然有效,但引用现在位于
*this中的元素。现行标准通过[container.requirements.general]/12 中的一揽子声明做出此保证,并且正在考虑通过LWG 2321 提供更直接的保证。
【讨论】: