首页 > 后端开发 > C++ > 您应该如何在 C 中正确地重用移动的容器?

您应该如何在 C 中正确地重用移动的容器?

Mary-Kate Olsen
发布: 2024-12-03 02:42:10
原创
617 人浏览过

How Should You Properly Reuse Moved Containers in C  ?

重用移动的容器:正确的方法

在 C 中重用移动的容器的话题引发了讨论。本文探讨了处理此类情况的正确方法。

考虑以下代码片段:

std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);

// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize

container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
登录后复制

根据 C 0x 标准草案,自迁移以来,ver3 似乎是首选方法对象处于“有效但未指定的状态”。为了澄清这个概念,我们参考一下标准中的定义:

[defns.valid]
§17.3.26     valid but unspecified state

an object state that is not specified except that the object’s invariants are met and operations on the object behave as specified for its type
登录后复制

这意味着被移动的对象仍然存在并且可以像往常一样进行操作,不包括有前提条件的操作(除非前提条件被验证)

例如,clear() 操作没有先决条件。通过使用clear(),容器将重置为定义的状态,以便后续使用。

因此,重用移动容器的正确方法是执行clear()操作,如ver2中所示代码片段。这种方法可确保容器恢复到已知且一致的状态。

以上是您应该如何在 C 中正确地重用移动的容器?的详细内容。更多信息请关注PHP中文网其他相关文章!

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