移动构造函数的触发有个前提,就是构造时需要基于一个临时对象。
标准库提供了move函数,可以把一个左值转换为右值,从而可以触发移动构造函数。
#include <iostream>
using namespace std;
class A{
public:
A()
{
m_i = new int(1);
cout<<"Construct A, this addr:"<<this<<", m_i addr:"<<m_i<<endl;
}
A(const A &a):m_i(new int(*a.m_i))
{
cout<<"Copy Construct A, ori addr:"<<&a<<" ori m_i addr:"<<a.m_i<<" *m_i="<<*a.m_i<<", this addr:"<<this<<" m_i addr:"<<m_i<<" *a.m_i="<<*a.m_i<<endl;
}
A(A&& a):m_i(a.m_i)//移动构造函数接受一个所谓的“右值引用”的参数,完成资源的转移
{
cout<<"Move Construct A, or