std::move的作用只有一个,那就是把一个左值强制转换为右值,有了这个右值,右值允许的任何操作就可以实施了。比如:1. 这个右值可以赋给一个左值变量,2. 这个右值可以被一个右值引用来引用。
class A
{
public:
A(int n):m_size(n)
{
m_ptr=new int[n];
}
int m_size;
int* m_ptr;
~A()
{
cout<<" Destructor is called m_ptr="<<m_ptr<<endl;
delete[] m_ptr;
m_ptr=nullptr;
}
A(A& a)
{
cout<<" copy constructor is called"<<endl;
m_size=a.m_size;
m_ptr=new int[m_size];
}
A(A&& a) // move constructor
{
if(this!=&a)
{
m_ptr=a.m_ptr;
m_size=a.m_size;
a.m_ptr=nullptr;
}
cout<<" move constructor is called"<<endl;
}
A& operator=( A&&r) // move assignment operator
{
if(this!=&r)
{
delete[] m_ptr;
m_ptr=r.m_ptr;
m_size=r.m_s
2264



被折叠的 条评论
为什么被折叠?



