调整具有相同基类的对象上的指针数组的大小

Resizing array of pointers on objects with the same base class

本文关键字:指针 数组 对象 调整 基类      更新时间:2023-10-16

我在C++有问题,我找不到答案。我有一些课程:

class Xyz{
   //...
};
class MyClass1: public Xyz{
   //...
};
class MyClass2: public Xyz{
   //...
};
class MyClass3: public Xyz{
   //...
};

如您所见,MyClass1、MyClass2 和 MyClass3 具有相同的基类。现在我想定义一些对象:

MyClass1 *object1 = new MyClass1();
MyClass2 *object2 = new MyClass2();
MyClass3 *object3 = new MyClass3();

之后,我想创建一个动态数组,其中包含指向这些对象的指针(因为我知道这是可能的(和一个保存该数组中元素数量的整数。我将该数组命名为 someName,将来它应该存储对象 1、对象 2 和对象 3。

Xyz **someName;
int numberOfElements = 0;

问题从这里开始。 someName 是空的,所以我想添加一些东西。但是我不知道如何制作一个具有给定位置的新数组,以便指针将旧元素复制到其中。这当然不起作用:

Xyz **someNameTemp = new Xyz[numberOfElements+1];

知道调整大小功能应该是什么样子吗?感谢您的帮助。

您可以避免所有的麻烦,只需使用std::vector

std::vector<Xyz *> pointers;
pointers.push_back(new MyClass1());
pointers.push_back(new MyClass2());
// etc.

[旁注:你应该强烈考虑不使用原始指针;而是使用智能指针,因为它使资源管理变得更加简单。

Xyz **someNameTemp = new Xyz*[numberOfElements+1];
for (int i=0; i<numberOfElements; ++i)
    someNameTemp[i] = someName[i];
delete [] someName;
someName = someNameTemp;
++numberOfElements
// someName[numberOfElements - 1] uninitialized

此外,首次创建指针时,请务必对其进行初始化。 要么为 NULL,要么是分配的数组。