Привет, я задал сегодня вопрос о Как вставить различные типы объектов в один и тот же векторный массив, и мой код в этом вопросе был
 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. Последние три часа я читал об этой теме, но документация кажется мне довольно продвинутой. **** Может ли кто-нибудь дать мне небольшой пример кода использования 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 );
...........
}
И я не понимаю синтаксис!