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

时间:2011-12-18 00:07:45

标签: c++ arrays pointers dynamic

我在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,将来它应该存储object1,object2和object3。

Xyz **someName;
int numberOfElements = 0;

问题从这里开始。 someName是空的,所以我想添加一些东西。但我不知道如何使用给定数量的地方创建一个新数组,以便将旧元素复制到它。这不起作用:

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

知道调整大小功能应该怎么样? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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

std::vector<Xyz *> pointers;

pointers.push_back(new MyClass1());
pointers.push_back(new MyClass2());
// etc.

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

答案 1 :(得分:0)

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,要么是已分配的数组。