Hallo, ich habe heute eine Frage zum Einfügen verschiedener Objekttypen in dasselbe Vektorarray gestellt. Mein Code in dieser Frage war
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
}
und ich wollte Vektoren verwenden, also schrieb jemand, dass ich das tun sollte:
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();
}
aber dann schlugen er und viele andere vor, dass ich besser Boost-Zeigercontainer
oder verwenden sollte shared_ptr
. Ich habe die letzten 3 Stunden damit verbracht, über dieses Thema zu lesen, aber die Dokumentation scheint mir ziemlich fortgeschritten zu sein. **** Kann mir jemand ein kleines Codebeispiel für die shared_ptr
Verwendung geben und warum sie die Verwendung vorgeschlagen haben shared_ptr
. Auch gibt es andere Typen wie ptr_vector
, ptr_list
und ptr_deque
** **
Edit1: Ich habe auch ein Codebeispiel gelesen, das Folgendes enthielt:
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 );
...........
}
Und ich verstehe die Syntax nicht!
main
erzeugt einen Vektor, der genannten Shared - Zeiger auf einen Typ enthalten kannFoo
; Der zweite erstellt eineFoo
Verwendungnew
und einen gemeinsamen Zeiger, um sie zu verwalten. Der dritte fügt eine Kopie des gemeinsam genutzten Zeigers in den Vektor ein.