首页 >后端开发 >C++ >C 11 中移出对象的有效性和允许的操作是什么?

C 11 中移出对象的有效性和允许的操作是什么?

Linda Hamilton
Linda Hamilton原创
2024-12-06 09:34:12500浏览

What are the Validity and Allowable Operations on Moved-From Objects in C  11?

C 11 中移出对象的有效性

理解 C 11 中移出对象的有效性可能很复杂。本文旨在阐明这个概念,特别是在 pimpl 对象的上下文中。

移自对象

当对象被移出时,其状态将变得不确定。标准库定义了标准库类型的有效性标准,确保移出的对象处于有效但未指定的状态。但是,对于自定义类型,开发人员有责任定义和记录移出对象的有效状态和允许的操作。

示例:Pimpl Idiom

In示例 pimpl 习惯用法中,impl_ 成员指向动态分配。移动操作后,移出对象中的指针将设置为 nullptr。这使得 do_stuff() 方法无效,因为它尝试取消引用 impl_ 指针。

不变与有效状态

Foo 对象始终可以 do_stuff 的不变() 移出后不再有效。一般来说,移出的对象可能无法满足适用于未移动对象的所有不变量。

选项 1:检查操作

一个选项是显式检查如果 do_stuff() 中的 impl_ 指针为 nullptr,并在必要时对其进行初始化。但是,这会带来潜在的性能开销。

选项 2:定义无效状态

或者,代码可以显式定义移出的 Foo 对象处于无效状态状态并且对它们调用 do_stuff() 将导致错误。

概念和移出对象

需要注意的是,标准库定义的概念不考虑移出对象。为了满足概念的要求,自定义类型的移出对象仍然必须满足概念要求。

结论

理解移出对象的有效性至关重要用于正确实现移动语义。开发人员应仔细考虑移动操作对其对象状态的影响,并相应地定义预期行为。

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

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