将向量初始化程序列表构造函数与派生类的shared_ptr一起使用

时间:2019-04-06 23:58:29

标签: c++

我正在尝试初始化vector个中的shared_ptr个。不幸的是,以下小示例无法编译:

#include <vector>
#include <memory>

class Base {};
class Derived1 : Base {};
class Derived2 : Base {};

int main() {
    std::vector<int> v1 = {1, 2, 3}; // no error
    std::vector<std::shared_ptr<Base>> v2{
        std::make_shared<Derived1>(),
        std::make_shared<Derived2>()
    }; // error
}

为什么我要使用初始化列表创建int而不是shared_ptr的向量?

1 个答案:

答案 0 :(得分:2)

因为您正在使用私有继承。编译:

#include <vector>
#include <memory>

class Base {};
class Derived1 : public Base {};
class Derived2 : public Base {};

int main() {
    std::vector<int> v1 = {1, 2, 3}; // no error
    std::vector<std::shared_ptr<Base>> v2{
        std::make_shared<Derived1>(),
        std::make_shared<Derived2>()
    }; // error
}