Привіт, сьогодні я задав питання про те, як вставити різні типи об’єктів в один і той же векторний масив, і мій код у цьому питанні був
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
}
і я хотів використовувати вектори, щоб хтось написав, що я повинен це зробити:
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();
}
але тоді він та багато інших запропонували мені краще використовувати контейнери покажчика Boost
або shared_ptr
. Я провів останні 3 години читання на цю тему, але документація мені здається досить просунутою. **** Чи може хто-небудь дати мені невеликий приклад shared_ptr
використання коду та чому він запропонував використовувати shared_ptr
. Крім того, існують і інші типи , такі як ptr_vector
, ptr_list
і ptr_deque
** **
Edit1: Я теж прочитав приклад коду, який включав:
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 );
...........
}
І я не розумію синтаксис!
main
створює вектор, який може містити спільні вказівники на тип, який називаєтьсяFoo
; другий створюєFoo
використанняnew
та спільний вказівник для управління ним; третій поміщає копію спільного вказівника у вектор.