加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读