gpt4 book ai didi

c++11 - std::move 构造后的对象状态

转载 作者:行者123 更新时间:2023-12-04 06:38:54 25 4
gpt4 key购买 nike

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

最佳答案

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

另见 this question

关于c++11 - std::move 构造后的对象状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com