私はTypeBがTypeAを拡張する2つのクラス(TypeAとTypeB)を持っています。配列内のC++オブジェクト
私はそうのようなオブジェクトを作成した場合:
ATypeA* NewObject = SpawnObject<ATypeB>();
をスポーンオブジェクトのメソッドは、単に新しいATypeBオブジェクト
を作成し、タイプAの配列に格納し、内のオブジェクトでありますタイプAまたはタイプBの配列?
私はTypeBがTypeAを拡張する2つのクラス(TypeAとTypeB)を持っています。配列内のC++オブジェクト
私はそうのようなオブジェクトを作成した場合:
ATypeA* NewObject = SpawnObject<ATypeB>();
をスポーンオブジェクトのメソッドは、単に新しいATypeBオブジェクト
を作成し、タイプAの配列に格納し、内のオブジェクトでありますタイプAまたはタイプBの配列?
あなたの配列とオブジェクトの割り当て方法によって異なります。
、配列内のオブジェクトは、タイプTypeA
の*NewObject
のスライスコピーとなります配列がTypeA myArray[10];
として宣言され、あなたはmyArray[0] = *NewObject;
を使用してオブジェクトを割り当てた場合。
、配列はタイプTypeB
の当然のNewObject
が指す同じオブジェクトへのポインタを、含まれています配列は、(おそらくあなたの意図)TypeA* myArray[10];
として宣言されて、あなたはmyArray[0] = NewObject;
を使用してオブジェクトを割り当てた場合。
つまり、生の配列ではなくstd::vector<std::unique_ptr<TypeA>>
を使用することをお勧めします。コードをシンプルで安全にします。
タイプA – STF
オブジェクトまたはポインタを配列に格納していますか? –
ポインタと参照を使用して多態性のみを取得します。通常の変数に代入すると、そのクラスでスライスを取得できます。 – Barmar