baseClass *array[10];
baseClass **array2 = new baseClass *[size];
(delete
모든 것을 잊지 마세요). 누설이나 이중 자유를 피하기 위해 객체의 수명에주의해야합니다. 특히 런타임에 크기를 변경해야하는 경우 배열의 할당 및 할당 해제에주의해야합니다. 벡터가 당신을 위해 배열의 메모리를 처리하기 때문에
는
std::vector<baseClass*> vec;
이 앞의 예를 향상,하지만 당신은 여전히 BaseClass로 포인터에주의해야한다.
std::vector<boost::variant<first,second> > vec2;
이
수동으로 개체를 할당하거나 할당 해제 메모리 할 필요가 없습니다 또 다른 개선이며, 최초 또는 초와 같은 개체에 액세스 측면에서 안전 입력합니다. 한 종류의 물체를 다른 물체와 착각 할 수는 없습니다.
std::vector<std::unique_ptr<baseClass>> vec3;
여전히 서로 다른 유형의 객체를 혼동 할 수이 옵션을
하지만 그것은 단지 표준 라이브러리를 사용하고 당신은 여전히 당신이 할당 개체의 수명을 관리 할 필요가 없습니다. 그것은 C++ 11을 사용합니다. 동적 배열을 필요로하지 않는 경우
또한, std::array<...,size>
std::array<std::unique_ptr<baseClass>,10> array3;
이 baseClass *array[10];
를 통해 런타임에 절대적으로 제로 공간이나 시간의 오버 헤드를 가지고 있으며, 훨씬 더 안전 할 수 있습니다. (제로 오버 헤드, 괜찮은 구현을 가정 함)
유사 : http://stackoverflow.com/questions/7018183/provide-array-of-derived-objects-to-function-that-operates-on-base-objects – tinman