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