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

您应该如何重用移动的 C 容器?

Linda Hamilton
发布: 2024-12-04 19:58:11
原创
689 人浏览过

How Should You Reuse a Moved C   Container?

重用移动的容器:确保正确的行为

当容器被移动时,根据 C 0x 标准草案,它被置于“有效但未指定的状态” 。在这种情况下,了解如何正确重用移动的容器至关重要。

考虑以下代码片段:

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);
登录后复制

根据标准,选项 ver3,其中涉及重新初始化移动容器,才是正确的做法。这是因为,在移动操作之后,对象被置于未指定的状态。

标准定义了“有效但未指定的状态”,如下所示:

“不是的对象状态”指定的,除了满足对象的不变量并且对象上的操作行为与其类型指定的一样“

这意味着移出的对象仍然存在并且可以操作上,但前提是满足先决条件。对于向量,使用clear()清除容器没有先决条件,并将其返回到已知状态。

因此,建议使用clear()来重置移动的容器并将其恢复到可用状态。

选项 ver2(涉及在移动的容器上调用clear())也是有效的。然而,假设移动的容器是空的,它可能会导致优化。使用clear() 可确保容器返回到已知状态,无论优化如何。

不建议使用选项 ver1,该选项不执行任何操作。这是因为容器在移动后处于未指定的状态,并且可能会表现出意外的行为。

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

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