c ++: o vetor pode <Base> conter objetos do tipo Derivado?

O título praticamente diz tudo. Basicamente, é legal fazer isso:

class Base {
    //stuff
}

class Derived: public Base {
    //more stuff
}

vector<Base> foo;
Derived bar;
foo.push_back(bar);

Baseado em outros posts que eu vi, o seguinte é bom, mas eu não quero usar ponteiros neste caso porque é mais difícil fazer com que seja thread seguro.

vector<Base*> foo;
Derived* bar = new Derived;
foo.push_back(bar);

questionAnswers(3)

yourAnswerToTheQuestion