我有两个类(TypeA和TypeB),其中TypeB扩展了TypeA。
如果我创建一个这样的对象:
ATypeA* NewObject = SpawnObject<ATypeB>();
生成对象方法只是创建一个新的 ATypeB 对象
然后将其存储在TypeA的数组中,对象是在TypeA的数组中还是TypeB的数组中?
这取决于您的数组以及您分配对象的方式。
如果数组声明为TypeA myArray[10];
并且您使用myArray[0] = *NewObject;
分配对象,则数组中的对象将是TypeA
类型的*NewObject
的切片副本。
如果数组被声明为TypeA* myArray[10];
(可能是您的意图)并且您使用myArray[0] = NewObject;
分配您的对象,那么数组将包含一个指向NewObject
指向同一对象的指针,当然类型为TypeB
。
也就是说,您可能应该考虑使用std::vector<std::unique_ptr<TypeA>>
而不是原始数组。它将使您的代码更简单、更安全。