右值引用:必须保存在变量中,没有地址的量:右值
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"这是A的构造函数"<<endl;
}
virtual void showInfo()
{
cout<<"aaaaaaaaaaaaaaaaaa"<<endl;
}
virtual~A()
{
cout<<"这是A的析构函数"<<endl;
}
};
class B:public A
{
public:
B()
{
cout<<"这是B的构造函数"<<endl;
}
void showInfo()
{
cout<<"bbbbbbbbbbbbbbbb"<<endl;
}
~B()
{
cout<<"这是B的析构函数"<<endl;
}
};
int main(int argc, char *argv[])
{
A *a1=new B;
a1->showInfo();
delete a1;
cout<<"*************************"<<endl;
A a2=B();
a2.showInfo();
cout<<"****************"<<endl;
A &&a3=B();
a3.showInfo();
return 0;
}
C++右值引用std::move
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"这是A的构造函数"<<endl;
}
virtual void showInfo()
{
cout<<"aaaaaaaaaaaaaaaaaa"<<endl;
}
virtual~A()
{
cout<<"这是A的析构函数"<<endl;
}
};
class B:public A
{
public:
B()
{
cout<<"这是B的构造函数"<<endl;
}
void showInfo()
{
cout<<"bbbbbbbbbbbbbbbb"<<endl;
}
~B()
{
cout<<"这是B的析构函数"<<endl;
}
};
int main(int argc, char *argv[])
{
A *a1=new B;
a1->showInfo();
delete a1;
cout<<"*************************"<<endl;
A a2=B();
a2.showInfo();
cout<<"****************"<<endl;
A &&a3=B();
a3.showInfo();
A &&a4=std::move(a2);
a4.showInfo();
return 0;
}