首页 > 后端开发 > C++ > C 11 中移出对象的有效状态是什么以及如何定义它们?

C 11 中移出对象的有效状态是什么以及如何定义它们?

Barbara Streisand
发布: 2024-12-01 18:14:11
原创
384 人浏览过

What are the Valid States of Moved-from Objects in C  11 and How to Define Them?

理解 C 11 中移出对象的有效状态

C 11 中的移动语义引入了一个关键概念:之后对象的状态被搬离。然而,移出对象必须满足的确切条件可能会令人困惑。

pimpl 对象的问题

考虑 pimpl 习惯用法,其中一个类包装一个指向实现对象的指针。如果我们从 Foo 对象(包含 std::unique_ptr)移动,之后我们可以用它做什么?

  • 销毁或分配给它是安全的。
  • 调用成员函数(通过实现指针)是有问题的,因为它可能引用已删除的成员函数

标准库移出状态

C 标准定义标准库类型的移出对象放置在“未指定但有效”的状态中。状态。”这意味着您可以对具有有效前提条件的它们执行操作。

但是,对于非标准类型,您必须定义并记录移出后允许的有效状态和操作。

定义 pimpl 的有效状态

在 Foo 示例中,我们可以指定从它移动会渲染do_stuff 函数无效。这将防止我们意外地在移出的对象上调用它。

避免动态分配

为了避免在检查有效状态时动态分配的开销,请考虑使用“空对象”模式。这涉及到当对象处于无效状态时使用默认的 FooImpl。

概念和移出对象

最后,请注意移出对象仍必须满足标准库概念的要求。如果您的类型未保持有效状态,则将其与标准库函数一起使用可能会导致未定义的行为。

以上是C 11 中移出对象的有效状态是什么以及如何定义它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板