我在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];
知道调整大小功能应该怎么样? 谢谢你的帮助。
答案 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,要么是已分配的数组。