簡體   English   中英

如何強制std :: sort使用move構造函數和move-assignment?

[英]How to force std::sort to use move constructor and move-assignment?

我有一個Data類,目前(不可復制)。 std::sort std::vector<Data>上的std::sort有效,因為我為Data定義了move-constructor和move-assignment。 我這樣做是因為該類內部有很多數據,復制內容的速度太慢。 但是,出於不相關的原因,我現在正在考慮將復制構造函數Data(const Data& other)和標准賦值運算符(來自const Data& )添加到類中。 我怎樣才能確保當我排序的矢量Datastd::sort仍然會使用移動構造函數和移動賦值?

如何確定對向量的向量進行排序時,std :: sort仍將使用move-constructor和move-assignment?

實際上,您不需要。 您必須確保使用的swap函數直接或間接利用了move構造函數中已經使用的任何技巧。 我認為這是如何運作的。 換句話說, sort需要良好的交換,而不必是副本。

“直接”的意思是簡單地使用默認的std::swap ,它會在可能時使用move構造函數。

template <class T> void swap (T& a, T& b)
{
  T c(std::move(a)); a=std::move(b); b=std::move(c);
}

因此,很有可能,您不需要做任何特殊的事情,因為swap (或正如@MarcGlisse指出的那樣,直接使用排序算法)將使用move構造函數。

只需為您的Data類提供move-constructor,move-assignment和free swap -function(在同一名稱空間中)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM