C++数组继承中的对象

C++ objects within an array inheritance

本文关键字:对象 继承 数组 C++      更新时间:2023-10-16

我有两个类(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>>而不是原始数组。它将使您的代码更简单、更安全。