Название в значительной степени говорит само за себя. В принципе, законно ли это делать:
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);