我在一个微控制器上(这意味着我只能进行静态内存分配)而且我正在尝试继承......
假设我有一个抽象类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
}
对于这种静态记忆问题,还有成语或其他东西吗?
答案 0 :(得分:1)
使用动态分配是最简单的,但如果不可能,则必须将实例存储在函数外的某个位置,例如:
static ImageImpl image;
Image& FontImpl::GetImage(char c) {
image = ImageImpl(c);
return image;
}