当前位置:  开发笔记 > 编程语言 > 正文

在向量的声明中移动unique_ptr

如何解决《在向量的声明中移动unique_ptr》经验,为你挑选了1个好方法。

我尝试在声明期间在向量中移动一些unique_ptr,我收到错误.我想我在不知情的情况下制作副本.

我不明白为什么我在声明中遇到问题,而在push_back期间它工作得很好.

我用几行简化了问题.

#include 
#include 
#include 
using namespace std;

int main() {

    unique_ptr i1 = make_unique(142);
    unique_ptr i2 = make_unique(242);
    unique_ptr i3 = make_unique(342);


    vector> v;

    //Those lines work
    v.push_back(move(i1));
    v.push_back(move(i2));
    v.push_back(move(i3));

    //ERROR
    vector> v2 {move(i1), move(i2), move(i3)}; 

    return 0;
}

错误是:

use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const
std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp =
std::default_delete]'
     { ::new(static_cast(__p)) _T1(std::forward<_Args>(__args)...); }

我错过了什么?

谢谢 !



1> Some program..:

当你这样做

vector> v2 {move(i1), move(i2), move(i3)};

你实际上并没有直接进入矢量v2.相反,编译器将创建一个std::initializer_list移动的唯一指针,并将该列表对象传递给std::vector构造函数,然后构造函数将尝试从初始化列表中复制元素.

不幸的是,我知道无法解决问题,使用中间初始化列表来初始化唯一指针的向量.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有