[英]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&
)添加到類中。 我怎樣才能確保當我排序的矢量Data
, std::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.