下面的代码给出了错误:
use of deleted function ‘constexpr B::B(const B&)’
现在,我知道发生这种情况是因为通过指定移动构造函数(有意)隐式删除了复制构造函数,并且复制向量会导致调用(已删除)复制构造函数。我想我也明白为什么要使用向量的复制构造函数和赋值运算符了。我显然想使用移动构造函数和赋值运算符:移动对象,所以也要移动它包含的向量。那么,如何让我的移动构造函数/赋值运算符使用向量的移动构造函数/赋值运算符?
这是代码:
#include <vector>
class B {
private:
/* something I don't want to copy */
public:
B() {};
B(B&& orig) {/* move contents */};
B& operator=(B&& rhs) {
/* move contents */
return *this;
};
};
class A {
private:
vector<B> vec;
public:
A() : vec() {};
A(A&& orig) : vec(orig.vec) {};
A& operator=(A&& rhs) {
vec = rhs.vec;
return *this;
};
};