【问题标题】:State of object after std::move constructionstd::move 构造后的对象状态
【发布时间】:2010-12-24 01:08:13
【问题描述】:

为了移动构造而移动的对象处于只能被破坏的状态是否合法/正确的 c++0x?例如:

class move_constructible {...};

int main()
{
    move_constructible x;
    move_constructible y(std::move(x));
    // From now on, x can only be destroyed. Any other method will result
    // in a fatal error.
}

为了记录,我试图将一个带有指针成员的 c 结构包装在一个 c++ 类中,该指针成员总是应该指向一些分配的内存区域。所有的 c 库 API 都依赖于这个假设。但是这个要求阻止了编写一个真正便宜的移动构造函数,因为为了让 x 在移动后仍然是一个有效的对象,它需要自己分配的内存区域。我已经以这样一种方式编写了析构函数,它会在从 c API 调用相应的清理函数之前首先检查 NULL 指针,以便在移动后至少可以安全地销毁结构。

【问题讨论】:

标签: c++11 move-semantics


【解决方案1】:

是的,语言允许这样做。事实上,这是移动语义的目的之一。但是,您有责任确保没有其他方法被调用和/或提供正确的诊断。请注意,通常您还可以至少使用赋值运算符来“恢复”您的变量,例如在交换两个值的经典示例中。

另见this question

【讨论】:

  • 感谢您的指点。实际上,该链接中提到的要求听起来合理且易于实施。干杯。
猜你喜欢
  • 2022-12-23
  • 2011-05-04
  • 2013-12-08
  • 2015-01-07
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
相关资源
最近更新 更多