我有一个用 C++ 定义纯虚方法的抽象类:
class Base
{
Base();
~Base();
virtual bool Test() = 0;
};
我已经将它与许多其他类(它们提供了 Test() 的实现)进行了子类化,我将它们称为 A、B、C 等。我现在想创建一个包含其中任何一个的数组使用这个基类的类型:
int main(int argc, char* argv[])
{
int size = 0;
Base* bases = new Base[10];
bases[size++] = new A();
bases[size++] = new B();
for (int i = 0; i < size; i++)
{
Base* base = bases[i];
base->Test();
}
}
(请原谅我可能犯的任何错误,我正在写这篇文章是为了提供一个简单的例子)。
问题是我无法实例化数组,因为它需要创建基类的实例(它不能这样做,因为它是抽象的)。但是,如果不这样做,它就没有分配分配给数组索引所需的内存,因此在尝试访问该内存时会出现段错误。我的印象是将 new 和 delete 与 malloc 和 free 混合使用不是好的做法。
可能是我混淆了应该使用的方式,我应该尝试使用模板或其他一些机制来执行此操作,但希望我已经提供了足够的信息来说明我正在尝试做什么。
那么这样做的最佳方法是什么?我该如何解决将内存分配给抽象类的问题?
谢谢, 丹
最佳答案
该代码只有一点点误解。您必须分配指针,而不是分配 Base 对象。指针可以随时存在。指向抽象类、不完整类型甚至 void 的指针都是有效的:
int main(int argc, char* argv[])
{
int size = 0;
Base** bases = new Base*[10];
bases[size++] = new A();
bases[size++] = new B();
for (int i = 0; i < size; i++)
{
Base* base = bases[i];
base->Test();
}
}
关于c++ - 如何使用抽象类为实例数组分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/368976/