我从链接学习移动语义
我有一堂课
class Holder
{
public:
Holder(int size) // Constructor
{
m_data = new int[size];
m_size = size;
}
~Holder() // Destructor
{
delete[] m_data;
}
Holder(const Holder& other)
{
cout << "copy constructor" << endl;
m_data = new int[other.m_size];
memcpy(m_data, other.m_data, sizeof(int));
m_size = other.m_size;
}
Holder &operator=(const Holder& other)
{
if (this == &other)
return *this;
delete[]m_data;
m_data = new int[other.m_size];
memcpy(m_data, other.m_data, sizeof(int));
m_size = other.m_size;
return *this;
}
private:
int* m_data;
size_t m_size;
};
此类具有复制构造函数,例如:
Holder(const Holder& other)
{
cout << "copy constructor" << endl;
m_data = new int[other.m_size];
memcpy(m_data, other.m_data, sizeof(int));
m_size = other.m_size;
}
然后移动构造函数实现如下:
Holder(Holder&& other) // <-- rvalue reference in input
{
m_data = other.m_data; // (1)
m_size = other.m_size;
other.m_data = nullptr; // (2)
other.m_size = 0;
}
我有一个问题:为什么我们不实现如下的复制构造函数:
Holder( Holder& other)
{
m_data = other.m_data;
m_size = other.m_size;
other.m_data = nullptr;
other.m_size = 0;
}
你能告诉我为什么这种方式不使用吗?谢谢