c – 为什么调用复制构造函数而不是移动构造函数?
发布时间:2020-12-16 10:25:30 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: class Outer{ class Inner{public: Inner(Inner i):outers(std::move(i.outers)),test(std::move(test)) {} void addOuter(const Outer o) {outers.push_back(std::move(o));} private: std::vectorOuter outers; std::unique_ptrstd::stri
请考虑以下代码:
class Outer { class Inner { public: Inner(Inner&& i):outers(std::move(i.outers)),test(std::move(test)) {} void addOuter(const Outer& o) {outers.push_back(std::move(o));} private: std::vector<Outer> outers; std::unique_ptr<std::string> test; }; public: Outer(Outer&& o):inners(std::move(o.inners)) {} private: std::vector<Inner> inners; }; 当我尝试在Visual Studio 2012上编译上面的代码时,我收到以下错误: 错误1错误C2248:’std :: unique_ptr< _Ty> :: unique_ptr’:无法访问类’std :: unique_ptr< _Ty>‘中声明的私有成员 显然,编译器调用复制构造函数而不是addOuter方法中的push_back中的移动构造函数.这是编译器错误吗?如果不是为什么,对于这个特定情况,是不是调用了移动构造函数? 解决方法
因为o作为const引用传递给addOuter.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读