exchange的实现近似于:
template<class T, class U = T>
T exchange(T& obj, U&& new_value)
{
T old_value = std::move(obj); //将obj的旧值移动到old_value中
obj = std::forward<U>(new_value);//将new_value的值移动到obj中
return old_value; //返回obj的旧值,由于T支持移动语句,因此obj的旧值移动到了获取返回值的对象中
}
可见exchange是将new_value的值移动到obj中,然后再将obj的旧值作为返回值返回。
调用exchange的话,需要对象支持移动构造函数和移动赋值运算符:
#include <iostream>
#include <utility>
using namespace std;
class A{
public:
A(int d = 0)
{
m = new int(d);
}
A(A&& a)
{
m = a.m;
a.m = nullptr;
}
~A()
{
delete m;
m = nullptr;
}
void pout(