baseClass *array[10];
baseClass **array2 = new baseClass *[size];
これは最も簡単で危険な方法です。漏れや二重の解放を避けるために、オブジェクトの寿命について注意する必要があります。特に、実行時にサイズを変更する必要がある場合は、配列の割り当てと割り当て解除に注意する必要があります。
std::vector<baseClass*> vec;
ベクトルがあなたのために、配列のメモリを扱うが、あなたはまだ基底クラスのポインタで注意しなければならないので、これは前の例を向上させます。
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