加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何使用抽象类将内存分配给实例数组?

发布时间:2020-12-16 10:53:56 所属栏目:百科 来源:网络整理
导读:我有一个抽象类在c中定义一个纯虚方法: class Base{Base();~Base();virtual bool Test() = 0;}; 我已经将其子类化了许多其他类(它们为Test()提供了一个实现),我将其称为A,B,C等.我现在想要使用这个创建任何这些类型的数组基类: int main(int argc,char* ar
我有一个抽象类在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();
    }
}

(请原谅我可能犯的任何错误,我正在写这篇文章提供一个简单的例子).

问题是我无法实例化数组,因为它需要创建一个Base类的实例(它不能像它的抽象那样做).但是,如果不这样做,它就没有分配分配给数组索引所需的内存,因此在尝试访问该内存时会提供分段错误.我的印象是,将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();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读