zxCoder
V2EX  ›  C++

请教 std::vector<std::unique_ptr<B>>的类成员应该怎么写在构造函数

  •  
  •   zxCoder · Jun 14, 2021 · 3463 views
    This topic created in 1976 days ago, the information mentioned may be changed or developed.
    class A{
    public:
        std::vector<int> a;
        std::vector<std::unique_ptr<B>> b;
        A(std::vector<int> a,std::vector<std::unique_ptr<B>> b);
    };
    A::A(std::vector<int> a, std::vector<std::unique_ptr<B>> b):a(std::move(a)),b(std::move(b)) {}
    

    这样写报错了

    8 replies  •  2021-06-16 07:07:52 +08:00
    zxCoder
    zxCoder
    OP
    Jun 14, 2021
    1
    懂了 又是左值右值的问题。。。
    billwsy
    billwsy
    Jun 14, 2021 via iPhone
    2
    这报了啥错?看着怎么没啥问题?
    kilasuelika
    kilasuelika
    Jun 15, 2021 via Android❤️1
    3
    应该不是左值和右值的问题。
    unique_ptr 不能复制,但你用传值引用,就会发生复制,出错。
    kilasuelika
    kilasuelika
    Jun 15, 2021 via Android
    4
    值传递
    zxCoder
    zxCoder
    OP
    Jun 15, 2021
    5
    @billwsy
    @kilasuelika

    一开始 A a(x,y),报错了 改成 A a(x,std::move(y))就可以了
    shanPic
    shanPic
    Jun 15, 2021
    6
    @zxCoder 如果楼主还是用的题目中的构造函数写法(传值形参),“ 改成 A a(x,std::move(y))就可以了”,我认为应该是触发了函数参数的 copy elision 。顺便问一下,是用的 c++17 或者 20 编的吗?
    zxCoder
    zxCoder
    OP
    Jun 15, 2021
    7
    @shanPic c++14
    billwsy
    billwsy
    Jun 16, 2021 via iPhone
    8
    @shanPic 是函数参数的 move ctor. 应该是 C++11 的语法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   930 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:43 · PVG 05:43 · LAX 13:43 · JFK 16:43
    ♥ Do have faith in what you're doing.