2

为了移动构造而移动的对象处于只能被破坏的状态是否合法/正确的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++ 类 ac 结构,该指针成员总是应该指向一些分配的内存区域。所有的 c 库 API 都依赖于这个假设。但是这个要求阻止了编写一个真正便宜的移动构造函数,因为为了让 x 在移动后仍然是一个有效的对象,它需要自己分配的内存区域。我已经以这样一种方式编写了析构函数,它会在从 c API 调用相应的清理函数之前首先检查 NULL 指针,以便在移动后至少可以安全地销毁结构。

4

1 回答 1

3

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

另请参阅此问题

于 2010-12-24T02:27:20.800 回答