-2

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

假设我有一个抽象类Image和一个抽象类Font。的实例Font可以返回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
}

那么这种静态内存问题有成语之类的吗?

4

1 回答 1

1

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

static ImageImpl image;

Image& FontImpl::GetImage(char c) {
  image = ImageImpl(c);
  return image;
}
于 2016-05-12T01:43:17.837 回答