移动自定义容器的构造函数?

时间:2014-02-24 07:12:33

标签: c++ c++11 move-semantics rvalue-reference

是一个类的移动构造函数,它包含一个动态分配的数组,应该删除它吗?比如我有:

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(); //右边的那个得到一个名为的移动构造函数? 它应该与拷贝构造函数相同吗?

1 个答案:

答案 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。移动构造函数会修改其参数。