我有一个类Data
,它(现在)是不可复制的。 std::sort
上的std::vector<Data>
有效,因为我为Data
定义了移动构造函数和移动赋值。我是这样做的,因为类里面有很多数据,复制内容会太慢。但是,由于无关原因,我正在考虑将复制构造函数Data(const Data& other)
和标准赋值运算符(从const Data&
)添加到类中。如何确保在对Data
的向量进行排序时,std::sort
仍将使用move-constructor和move-assignment?
答案 0 :(得分:2)
如何确保在对数据向量进行排序时,std :: sort将会 仍然使用move-constructor和move-assignment?
实际上,你不需要。您必须确保使用的swap
函数直接或间接利用移动构造函数中已使用的任何技巧。那就是我认为它是如何运作的。换句话说,sort
需要良好的交换,而不一定是副本。
“直接”可能意味着只使用使用移动构造函数的默认std::swap
。
template <class T> void swap (T& a, T& b)
{
T c(std::move(a)); a=std::move(b); b=std::move(c);
}
所以,很可能,你不需要做任何特别的事情,因为swap
(或@MarcGlisse注意到,直接排序算法)将使用移动构造函数。
答案 1 :(得分:2)
为swap
类提供move-constructor,move-assignment和free Data
- function(在同一名称空间中)