是一个类的移动构造函数,它包含一个动态分配的数组,应该删除它吗?比如我有:
template<typename T>
class MyVector
{
public:
MyVector()
{
data = new T[32];
capacity = 32;
size = 0;
}
MyVector(const MyVector<T>& o) //The basic copy constructor
{
capacity = o.capacity;
size = o.size;
data = new T[capacity];
for(int i = 0; i < _size; i++)
{
data[i] = o.data[i];
}
}
MyVector(const MyVector<T>&& o) //The move constructor
{
//What goes here?
}
private:
T* data;
unsigned int size;
unsigned int capacity;
};
我理解当我执行以下操作时调用move构造函数:
MyVector A; A = MyVector(); //右边的那个得到一个名为的移动构造函数? 它应该与拷贝构造函数相同吗?
答案 0 :(得分:2)
是一个类的移动构造函数,它包含一个动态分配的数组,应该删除它吗?比如我有:
没有什么可以删除的。毕竟,对象是构造的。它应该做的就是从RHS上的对象获取资源。它应该使RHS处于合理的状态。例如,
MyVector(MyVector<T>&& o)
{
data = o.data;
o.data = nullptr;
capacity = o.capacity;
o.capacity = 0;
size = o.size;
o.size = 0;
}
请注意,为了使移动构造函数起作用,参数不能是const
。移动构造函数会修改其参数。