【发布时间】:2014-02-24 07:12:32
【问题描述】:
是一个持有动态分配数组的类的移动构造函数应该删除它吗?例如我有:
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;
};
我知道当我执行以下操作时会调用移动构造函数:
我的向量 A; A = 我的向量(); //右边那个得到一个调用的移动构造函数? 那么它应该与复制构造函数相同吗?
【问题讨论】:
-
这可能只是一个一次性练习,但您的
Vector不适用于没有默认构造函数的类型。真实向量不会在创建时创建 32 个新的Ts;他们为 32Ts 分配了足够的内存,然后根据需要通过placement-new 将内存与对象一起分配。
标签: c++ c++11 move-semantics rvalue-reference