2016-06-21 9 views
0

私はTypeBがTypeAを拡張する2つのクラス(TypeAとTypeB)を持っています。配列内のC++オブジェクト

私はそうのようなオブジェクトを作成した場合:

ATypeA* NewObject = SpawnObject<ATypeB>();

をスポーンオブジェクトのメソッドは、単に新しいATypeBオブジェクト

を作成し、タイプAの配列に格納し、内のオブジェクトでありますタイプAまたはタイプBの配列?

+0

タイプA – STF

+0

オブジェクトまたはポインタを配列に格納していますか? –

+0

ポインタと参照を使用して多態性のみを取得します。通常の変数に代入すると、そのクラスでスライスを取得できます。 – Barmar

答えて

2

あなたの配列とオブジェクトの割り当て方法によって異なります。

、配列内のオブジェクトは、タイプTypeA*NewObjectスライスコピーとなります配列がTypeA myArray[10];として宣言され、あなたはmyArray[0] = *NewObject;を使用してオブジェクトを割り当てた場合。

、配列はタイプTypeBの当然のNewObjectが指す同じオブジェクトへのポインタを、含まれています配列は、(おそらくあなたの意図)TypeA* myArray[10];として宣言されて、あなたはmyArray[0] = NewObject;を使用してオブジェクトを割り当てた場合。

つまり、生の配列ではなくstd::vector<std::unique_ptr<TypeA>>を使用することをお勧めします。コードをシンプルで安全にします。

関連する問題