2014-11-17 28 views
1

讓我們考慮下面的類:如何移動對象內部?

class Big 
{ 
public: 
    std::vector<int> convertToVector(); 
private: 
    std::vector<int> data_; 
}; 

我想Big::convertToVector()腸道對象和移動數據之外。

我正在考慮:

std::vector<int> Big::convertToVector() 
{ 
    return std::move(data_); 
} 

這是做正確的方式?

+2

是的。那是移動data_out的方法。 – Jagannath

回答

1

是的,這是正確的方式。

但是,您必須非常小心,因爲您的舊矢量未指定狀態;您可能需要清空它以避免意外。

std::vector<int> Big::convertToVector() { 
    std::vector<int> temp; 
    std::swap(temp, _data); 

    return std::move(temp); 
} 
+1

任何已移動的對象必須保持有效,所以不需要交換。我只是不確定返回類型。 –

+0

@MartinDrozdik oopsie,看起來你是對的 - *保證以有效但未指定的狀態離開移動的參數*。順便說一句,仍然讓我的解決方案合理,我會說。它也應該導致最小的運行時間開銷。 –

+0

@MartinDrozdik當我們在它的時候,如果你把它寫成'std :: vector Big :: convertToVector()&&',你可以完全跳過這個交換,因爲對象應該在調用後被銷燬。 –

-1

只要我知道,性病::矢量具有移動構造函數,所以你只是做(因爲我總是與其他容器一樣)

std::vector<int> Big::convert_to_vector() { return data_; } 
+1

這只是創建'data_' –

+0

感謝您的更正的副本.. –