【问题标题】:Are references / pointers guaranteed to be valid after moving std::deque?移动 std::deque 后引用/指针是否保证有效?
【发布时间】:2021-12-23 22:40:17
【问题描述】:

是否可以安全地假设在使用移动构造函数将双端队列移动到另一个后,我必须指向 std::deque 内的元素的任何指针仍然有效?

对于std::vector,我看不出有什么理由不这样做,但我对std::deque 不够熟悉,无法确定我可以做出同样的假设。

【问题讨论】:

  • 不要假设;阅读文档。

标签: c++ c++11 stl deque


【解决方案1】:

指向元素的指针仍然有效。 move construction之后:

在容器移动构造(重载 (8))之后,指向 other 的引用、指针和迭代器(除了结束迭代器)仍然有效,但引用现在位于 *this 中的元素。现行标准通过[container.requirements.general]/12 中的一揽子声明做出此保证,并且正在考虑通过LWG 2321 提供更直接的保证。

【讨论】:

  • 小心,移动赋值和移动构造不是一回事。最后我调查了一下,移动分配的向量不能保证(!),我不知道双端队列。
猜你喜欢
  • 2014-10-10
  • 2013-03-27
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
相关资源
最近更新 更多