以下のコードでエラーが発生します。
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;
};
};