首页 >后端开发 >C++ >什么条件确保 C 11 中移出对象的有效性?

什么条件确保 C 11 中移出对象的有效性?

DDD
DDD原创
2024-12-09 12:06:15802浏览

What Conditions Ensure the Validity of a Moved-From Object in C  11?

C 11 中“移自”对象的有效状态

问题:

中C 11、当一个对象被移走时,它进入一种未指定的状态。这样的“移出”对象应该满足什么条件才能保持有效?

答案:

移出对象的有效性由类型的规范定义,并且文档。

对于标准库类型,移出的对象被置于未指定但有效的状态,这意味着它们满足该类型的所有标准要求,除非另有说明。用户必须查询状态以确定有效操作。

对于开发人员定义的类型,您可以定义并记录构成有效状态的内容以及移出对象的允许操作。

在以下上下文中提供的 pimpl 习语示例:

class Foo {
    std::unique_ptr<FooImpl> impl_;
};

您可以指定从 Foo 对象移动会使 do_stuff 操作无效,使其未定义 行为。这是合理的,因为移动意味着不能对移出的对象执行进一步的操作。

或者,您可以为移出的 Foo 对象定义特定状态,确保标准库的概念要求是还是遇见了。这将允许您将移出的 Foo 对象与标准库一起使用,而不会出现未定义的行为。

请注意,标准库概念不考虑移出的对象。因此,如果移出的对象没有根据相关概念保持有效状态,则将它们与标准库一起使用将导致未定义的行为。

以上是什么条件确保 C 11 中移出对象的有效性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn