在现代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
之外还有其他更好的选择吗?
答案 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 }));