안녕하세요 저는 오늘 동일한 벡터 배열에 다른 유형의 객체를 삽입하는 방법에 대한 질문을했는데 그 질문의 코드는
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
using을 만들고new
이를 관리하기위한 공유 포인터를 만듭니다 . 세 번째는 공유 포인터의 복사본을 벡터에 넣습니다.