C++11 如何将对象内部构件移出? 让我们考虑下面的类: class Big { public: std::vector<int> convertToVector(); private: std::vector<int> data_; };
这是正确的方法吗?据我所知,std::vector有移动构造函数,所以您只需这样做(就像我对其他容器所做的那样)C++11 如何将对象内部构件移出? 让我们考虑下面的类: class Big { public: std::vector<int> convertToVector(); private: std::vector<int> data_; };,c++11,move,move-semantics,C++11,Move,Move Semantics,这是正确的方法吗?据我所知,std::vector有移动构造函数,所以您只需这样做(就像我对其他容器所做的那样) std::vector Big::convert_to_vector(){返回数据} 是的,这是正确的方法 但是,您必须非常小心,因为您的旧向量处于未指定的状态;您可能希望清空它以避免意外 std::vector<int> Big::convertToVector() { std::vector<int> temp; std::swap(tem
std::vector Big::convert_to_vector(){返回数据}
是的,这是正确的方法
但是,您必须非常小心,因为您的旧向量处于未指定的状态;您可能希望清空它以避免意外
std::vector<int> Big::convertToVector() {
std::vector<int> temp;
std::swap(temp, _data);
return std::move(temp);
}
std::vector Big::convertToVector(){
std::向量温度;
标准::交换(温度,_数据);
返回标准::移动(温度);
}
Yes。这是将数据移出的方法。这只会创建数据的副本
任何已移动的对象都必须保持有效,因此不需要交换。我只是不确定返回类型。@MartinDrozdik oopsie,看来您是对的-保证将moved from参数保持在有效但未指定的状态。顺便说一下,这仍然使我的解决方案合理。它还应该产生最小的运行时开销。@MartinDrozdik,在我们进行此操作时,如果您将其编写为std::vector Big::convertToVector()&&&
,则可以完全跳过该交换,因为无论如何在调用之后都应该销毁该对象。
std::vector<int> Big::convert_to_vector() { return data_; }
std::vector<int> Big::convertToVector() {
std::vector<int> temp;
std::swap(temp, _data);
return std::move(temp);
}