我正在尝试初始化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
的向量?
答案 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
}