Я нахожусь на микроконтроллере (что означает, что у меня может быть только статическое распределение памяти), и я пытаюсь работать с наследованием …..
Предположим, у меня есть абстрактный класс 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
}
Так есть ли идиома или что-то в этом роде для проблемы статической памяти?
Использование динамического размещения было бы проще, но если это невозможно, вы должны хранить экземпляр где-то вне функции, например:
static ImageImpl image;
Image& FontImpl::GetImage(char c) {
image = ImageImpl(c);
return image;
}
Других решений пока нет …