Hola, hoy hice una pregunta sobre cómo insertar diferentes tipos de objetos en la misma matriz de vectores y mi código en esa pregunta fue
gate* G[1000];
G[0] = new ANDgate() ;
G[1] = new ORgate;
//gate is a class inherited by ANDgate and ORgate classes
class gate
{
.....
......
virtual void Run()
{ //A virtual function
}
};
class ANDgate :public gate
{.....
.......
void Run()
{
//AND version of Run
}
};
class ORgate :public gate
{.....
.......
void Run()
{
//OR version of Run
}
};
//Running the simulator using overloading concept
for(...;...;..)
{
G[i]->Run() ; //will run perfectly the right Run for the right Gate type
}
y quería usar vectores, así que alguien escribió que debería hacer eso:
std::vector<gate*> G;
G.push_back(new ANDgate);
G.push_back(new ORgate);
for(unsigned i=0;i<G.size();++i)
{
G[i]->Run();
}
pero luego él y muchos otros sugirieron que sería mejor usar los contenedores de puntero Boost
o shared_ptr
. He pasado las últimas 3 horas leyendo sobre este tema, pero la documentación me parece bastante avanzada. **** ¿Alguien puede darme un pequeño ejemplo de código de shared_ptr
uso y por qué sugirieron usar shared_ptr
. También hay otros tipos como ptr_vector
, ptr_list
y ptr_deque
** **
Edit1: también he leído un ejemplo de código que incluía:
typedef boost::shared_ptr<Foo> FooPtr;
.......
int main()
{
std::vector<FooPtr> foo_vector;
........
FooPtr foo_ptr( new Foo( 2 ) );
foo_vector.push_back( foo_ptr );
...........
}
¡Y no entiendo la sintaxis!
main
crea un vector que puede contener punteros compartidos a un tipo llamadoFoo
; el segundo crea unFoo
usonew
y un puntero compartido para administrarlo; el tercero coloca una copia del puntero compartido en el vector.