你好,我今天在关于如何将不同类型的对象插入到同一个向量数组中的问题上提出了一个问题,我的代码如下:
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 Pointer Containers或者shared_ptr
。我已经花了过去3个小时阅读这个主题,但是文档对我来说似乎相当高级。
有人能给我一个shared_ptr
的小代码示例以及为什么他们建议使用shared_ptr
吗?还有类似于ptr_vector
、ptr_list
和ptr_deque
的其他类型吗?
编辑1:我也阅读过一个包含以下内容的代码示例:
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
的共享指针的向量;第二行使用new
创建了一个Foo
并使用共享指针来管理它;第三行将共享指针的副本放入向量中。 - Mike Seymour