C++(14):std::exchange

exchange的实现近似于:

template
T exchange(T& obj, U&& new_value)
{
    T old_value = std::move(obj);    //将obj的旧值移动到old_value中
    obj = std::forward(new_value);//将new_value的值移动到obj中
    return old_value;                //返回obj的旧值,由于T支持移动语句,因此obj的旧值移动到了获取返回值的对象中
}

可见exchange是将new_value的值移动到obj中,然后再将obj的旧值作为返回值返回。

调用exchange的话,需要对象支持移动构造函数和移动赋值运算符:

#include 
#include 
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()
	{
		if(m != nullptr)
		{
			cout<

你可能感兴趣的:(C/C++,c++)