哪个std-functions调用用户实现的交换函数版本?

时间:2013-07-10 15:05:39

标签: c++ c++11 std

为了确定在C + 11x后期支持自定义版本的交换是否有意义,我想知道哪些std-functions调用swap和 即使存在移动构造函数和移动分配,它们仍将从用户实现的版本中受益吗?

1 个答案:

答案 0 :(得分:2)

我认为标准库不会调用你的交换函数,

标准库会在需要可交换类型的地方调用swap的实现,例如在std::pair<>::swap的实现中。除此之外,其他代码也可能使用您的swap来实现自己的swap功能。对于这些情况,如果您已实现移动构造函数并移动赋值,则std::swap 的标准实现应该但不需要(AFAIK)来使用move-constructor / assignment。

对于已经实现移动操作的类型,swap的实现是一个三行函数,所以我会继续执行它:

void swap(mytype& lhs, mytype& rhs) {
   mytype tmp(std::move(lhs));
   lhs = std::move(rhs);
   rhs = std::move(tmp);
}