静态多态性问题

时间:2016-05-12 01:21:20

标签: c++ pointers inheritance static-memory-allocation

我在一个微控制器上(这意味着我只能进行静态内存分配)而且我正在尝试继承......

假设我有一个抽象类Image和一个抽象类FontFont的实例可以返回Image基于char的函数,如下所示:

Font* mf;
Image* image = mf->GetImage("a");

现在真正的问题是我不知道如何处理GetImage功能。

问题在于:在c ++中,如果您拥有抽象类的成员,则必须将其用作指针。所以我的困境是我有一个Font想要创建一个新的Image然后返回它。

如果它返回指向新创建的Image的指针,则返回对临时对象的引用:

Image* FontImpl::GetImage(char c){
  return &ImageImpl(c);  //This object is destroyed once this function exits
}

然后如果我回来,我会尝试返回一个这样的实际类型:

Image FontImpl::GetImage(char c){
  return ImageImpl(c);   //Cannot cast from ImageImpl to Image
}

对于这种静态记忆问题,还有成语或其他东西吗?

1 个答案:

答案 0 :(得分:1)

使用动态分配是最简单的,但如果不可能,则必须将实例存储在函数外的某个位置,例如:

static ImageImpl image;

Image& FontImpl::GetImage(char c) {
  image = ImageImpl(c);
  return image;
}