代码之家  ›  专栏  ›  技术社区  ›  Aconcagua

容器上的移动分配:以前包含的对象的状态

  •  0
  • Aconcagua  · 技术社区  · 7 年前

    来自 another question (实际上 this one ,但前者是更好的参考),除了20.5.5.15之外,我在标准中找不到合适的参考:

    例子:

    std::list<SomeClass> v1({10, 12});
    std::list<SomeClass> v2({7});
    v1 = std::move(v2);
    for(auto sc : v2)
    {
        std::cout << sc << ' ';
    }
    

    而GCC根本没有输出任何东西( std::vector std::list 都会收到 10 12 作为法律输出(适当 operator<< 提供)(e。g。通过交换内容来接收,尤其是 删除以前包含的对象?

    如果合法的话,如果元素没有被立即销毁(例如。g。因此,当开发人员希望关闭某些资源时,它们仍然保持打开状态)?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Caleth    7 年前

    [container.requirements.general] ,我们看到了

    a 被分配或摧毁。 确保 : rv 转让。

    在哪里? 是目的地和 是一个右值。这个 能够 通过交换来实现 使用源和目标的元素,但很可能是通过调整大小然后移动来完成的。

    1. __swap ,以确保执行移动指定。