标题几乎说明了一切。基本上,这样做是否合法:
class Base {
//stuff
}
class Derived: public Base {
//more stuff
}
vector<Base> foo;
Derived bar;
foo.push_back(bar);
根据我看过的其他帖子,下面是可以的,但我不想在这种情况下使用指针,因为很难使其线程安全。
vector<Base*> foo;
Derived* bar = new Derived;
foo.push_back(bar);
最佳答案
不,Derived
对象将是 sliced : 所有额外的成员都将被丢弃。
使用 std::vector<std::unique_ptr<Base> >
而不是原始指针.
关于c++: vector<Base> 可以包含 Derived 类型的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889178/