在C ++中创建vector的shared_ptr

时间:2016-01-13 14:46:45

标签: c++ c++11 vector std

在现代C ++中,我们可以初始化这样的矢量:

std::vector<int> v = { 1, 2, 3, 4, 5 };

但是,如果我尝试创建一个指向矢量的智能指针,则无法编译:

auto v = std::make_shared<std::vector<int>>({ 1, 2, 3, 4, 5 });

除了在创作后诉诸push_back之外还有其他更好的选择吗?

2 个答案:

答案 0 :(得分:11)

auto v = std::make_shared<std::vector<int>>(std::initializer_list<int>{ 1, 2, 3, 4, 5 });

这很有效。看起来编译器在没有直接指定initializer_list的情况下不能在make_unique params中使用{}。

次要编辑 - 使用MSVC 2015

答案 1 :(得分:2)

您也可以直接在参数中创建另一个向量来移动它:

auto v = std::make_shared<std::vector<int>>(std::vector<int>({ 1, 2, 3, 4, 5 }));