David y Zerugiran:
Ciertamente si crean un vector con punteros en vez de objetos tendran
que hacer la creacion y limpieza explicitamente (de otro modo como STL no
libera la memoria tendrian un memory leak). Pero dado que el vector no se
creara con objetos del mismo tipo entonces, me parece que los vectores no
son la solucion idonea y no facilitan el codigo en este caso.
Se me ocurren 2 opciones (ojo, no son las unicas y tampoco las mejores.
Fueron las primeras que me vinieron a la mente)
A) Sigue heredando tus clases de oSoldados para que reutilizes el codigo y
en vez de utilizar un vector STL como tal, crea una clase nueva llamada
oBatallon que en realidad el un grupo de soldados con enumeracion y metodos
para a~adir y eliminar del grupo. Internamente puedes utilizar un vector o
un simple array para almacenar los objetos , y en el destructor colocar el
codigo de *limpieza* que corresponde.
ejemplo:
class oBatallon
{
private:
oSoldados* p_foobar[MAX_SOLDADOS];
int p_count;
public:
oBatallon
{
p_count=0;
}
virtual ~oBatallon()
{
delete[] p_foobar;
}
virtual Add(oSoldado* p_var)
{
p_foobar[p_count++]=p_var;
}
virtual Delete()
{
delete p_foobar[p_count--];
}
virtual int Count() { return p_count; }
};
B) Olvidarte de esas clases derivadas y crear una clase oSoldados *muy*
generica y manejar el tipo de objeto a mano utilizando un metodo o miembro
de la clase.
ejemplo:
p_soldado= new oSoldado(TYPE_TANK);
if (p_soldado->tipo()== TYPE_TANK)
cout << "tipo es TANK\n";
else
cout << "tipo no es TANK\n";
Salu2 Javier.