の暗黙的に削除されたコピーコンストラクタを呼び出すと、std::vector<std::unique_ptr<A> >
を引数とするオブジェクトを作成しています。コンストラクタはこのエラー: 'std :: __ 1 :: unique_ptr <A、std :: __ 1 :: default_delete <A>>'
class B {
std::vector <std::unique_ptr<A> > e_;
public:
B(std::vector <std::unique_ptr<A> > e) : e_(std::move(e)){}
};
のように定義され、その後、
std::vector <std::unique_ptr<A> > e;
B b(e);
として使用し、Xcodeは私がstd::move()
を使用していますにもかかわらず、なぜエラーがまだ持続しているエラー
error: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<A, std::__1::default_delete<A> >'
:new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
を提示していますか?
EDIT:B b(e))
の代わりにB b(std::move(e))
を使用すると、エラーが消えるようですが、move
のロジックを機能の実装に移動する方法はありますか?
サイレント移動は* bad *です。呼び出し元のベクトルから移動する場合は、呼び出し元のコードでベクトルが移動されていることを明確にする必要があります。 –