C 11 中“移自”对象的有效状态
问题:
中C 11、当一个对象被移走时,它进入一种未指定的状态。这样的“移出”对象应该满足什么条件才能保持有效?
答案:
移出对象的有效性由类型的规范定义,并且文档。
对于标准库类型,移出的对象被置于未指定但有效的状态,这意味着它们满足该类型的所有标准要求,除非另有说明。用户必须查询状态以确定有效操作。
对于开发人员定义的类型,您可以定义并记录构成有效状态的内容以及移出对象的允许操作。
在以下上下文中提供的 pimpl 习语示例:
class Foo { std::unique_ptr<FooImpl> impl_; };
您可以指定从 Foo 对象移动会使 do_stuff 操作无效,使其未定义 行为。这是合理的,因为移动意味着不能对移出的对象执行进一步的操作。
或者,您可以为移出的 Foo 对象定义特定状态,确保标准库的概念要求是还是遇见了。这将允许您将移出的 Foo 对象与标准库一起使用,而不会出现未定义的行为。
请注意,标准库概念不考虑移出的对象。因此,如果移出的对象没有根据相关概念保持有效状态,则将它们与标准库一起使用将导致未定义的行为。
以上是什么条件确保 C 11 中移出对象的有效性?的详细内容。更多信息请关注PHP中文网其他相关文章!