こんにちは私は今日、同じベクトル配列に異なるタイプのオブジェクトを挿入する方法について質問しました、そしてその質問の私のコードは
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
;と呼ばれる型への共有ポインタを含むことができるベクトルを作成します。2つ目は、Foo
usingnew
と、それを管理するための共有ポインターを作成します。3つ目は、共有ポインターのコピーをベクトルに配置します。