拷贝构造函数我正在构造一个以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中介绍错误
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)...);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
为什么错误,即使我使用std::move()
还是坚持?
编辑:错误似乎消失如果我使用B b(std::move(e))
而不是B b(e))
,有什么办法将move
逻辑移动到函数的实现?
默默移动是*不好*。如果您正在从呼叫者的向量中移出,则应在呼叫者的代码中明确说明向量正在从中移出。 –