所以我有三个班级
class Base {
virtual int foo() { return 1; }
};
class Child: public Base {
virtual int foo() { return 2; }
};
class SecondChild: public Base {
virtual int foo() { return 3; }
};
我本来是将它们存储在向量中
std::vector<Base> myList;
列表可以由Child或SecondChild组成,但是我的问题是我是否想跑步
foo();
无论我最初用于创建对象的两个派生类中的哪一个,它将始终使用Base::foo
。这对我来说很有意义,但是我发现如果我用std::vector<std::unique_ptr<Base>>
替换std :: vector,它将运行派生的foo函数。这是我想要的行为,但我不知道为什么会这样。
所以我的问题是,std::unique_ptr<Base>
允许我这样做的区别是什么,这是不好的做法吗?我看了一下文档,但大部分内容我都不理解