C 中移动所有权和重用容器
在 C 中,当移动对象时(使用 std::move 函数),其所有权转移给新变量。这意味着原始变量变空并且不包含有效数据。
使用移动的容器时出现的一个常见问题是如何重用它们。问题出现了:“重用移动的容器的正确方法是什么?”
理解“有效但未指定的状态”
根据 C 0x 标准草案,移动后的对象处于“有效但未指定的状态”。这意味着该对象满足其不变量,但不能保证其内部状态是一致的。
选项 1:什么都不做
一种选择是什么也不做,假设该对象仍然有效。但是,不建议使用这种方法,因为如果容器的内部状态不一致,它可能会导致未定义的行为。
选项 2:使用clear“重置”
另一种选项是使用clear方法“重置”容器并将其清空。这种方法可确保容器的内部状态一致并允许安全地重用它。
选项 3:使用默认构造函数重新初始化
最后一个选项是简单地重新初始化容器使用其默认构造函数。这种方法还确保容器的内部状态一致并且可以再次使用。
首选方法
重用已移动容器的首选方法是使用clear方法。这种方法既安全又高效,并且避免了与其他选项相关的潜在陷阱。
示例
考虑以下代码:
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); //container2.clear(); Reset container = std::vector<int>(); // Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2);
通过使用clear方法重置container2,我们确保其内部状态一致并且可以安全地重用。结果,后续的push_back操作正确地将新元素添加到容器中。
以上是如何在 C 中安全地重用移动的容器?的详细内容。更多信息请关注PHP中文网其他相关文章!