¿Está bien lanzar un contenedor STL del tipo Base al tipo Derivado? Por ejemplo, tengo dos vectores. El primero es en tipo de una clase Base, el segundo es en tipo de una clase Derive.¿Está bien lanzar un contenedor STL con tipo Base al tipo Derivado?
class Base
{
// Code
};
class Derive : public Base
{
// Code
};
Uso
vector<Base*>* vec_base = new vector<Base*>;
// Add some Derive type data to vec_base
vector<Derive*>* vec_derive = (vector<Derive*>*)(vec_base);
// Using elements as Derive pointers. Works fine.
¿Está bien? (Funciona bien, pero quería obtener algunos comentarios sobre esto). Muchas gracias.
EDITAR: Actualizando según las respuestas.
Digamos, si uso ese vector con cuidado, y no lo usaré con herencia múltiple y no insertaré objetos que no sean Derive, ¿está bien? (Supongo que no lo es)
Y muchas gracias por las respuestas.
Re: actualización: nada que puedas hacer sin usar algo como std :: transform hará que use cualquier elenco que no sea reinterpret_cast, que no es lo que estás buscando – Flexo
@awoodland Entonces, reinterpretar_cast es malo incluso si no tipos polimórficos? Quiero decir, incluso si estoy 100% seguro de que "sé el tipo exacto" del vector reinterpret_cast no está definido para este caso. – Morpheus
reinterpret_cast es definitivamente malo en std :: vector, el problema es que no hay razón (portable, estandarizada) para suponer que el diseño de la memoria para std :: vector y std :: vector sean compatibles para que esto funcione. –
Flexo