【发布时间】:2016-03-02 16:36:11
【问题描述】:
I c++编程语言13.6.2 std::swap用于实现移动语义,思路如下:
class deutscheSchweine{
public:
deutscheSchweine(){std::cout<<"DS\n";}
deutscheSchweine& operator=(const deutscheSchweine& other){
deutscheSchweine tmp;
swap(*this, tmp);
return *this;
}
deutscheSchweine(deutscheSchweine&& other){}
deutscheSchweine& operator=(deutscheSchweine&& other){
swap(*this, other);
return *this;
}
};
int main(){
deutscheSchweine ds;
deutscheSchweine ds2;
ds2 = ds;
我上面的例子在调用赋值之后我们可以使用移动语义来从临时复制,但是这个例子导致递归调用移动赋值。我的问题是我们可以在移动语义中以某种适当的方式使用交换吗?
【问题讨论】:
-
如果你想以swap的形式实现move assignment,它需要是你自己的swap,而不是默认的swap,它是根据move assignment(和move构造)来实现的,并且会导致在海龟中一直向下......
-
谢谢这是对我问题的正确答案,因为在书中将交换与移动分配一起使用时可能没有提到这个细节。
-
deutscheSchweine 是攻击性的还是农业用语?