Я новичок в C++, и этот вопрос, вероятно, кажется noobish, поскольку я просто больше из Java/Actionscript3, и я никогда раньше не занимался вещами, связанными с памятью.C++ Сохранение ссылки/указателя абстрактного типа
Во всяком случае, как и для меня проблема: Сцена это абстрактный класс (так что я могу извлечь из него и есть несколько сцен, как MainScene и т.д. ')
То, что я хотел SceneManager сделать, это есть указатель/ссылка на выбранную сцену (curSc) а потом я бы установить сцену так: setScene (& someScene)
Но, как я понимаю, есть указатель я также должен инициализировать его следующим образом: curSc = новый Место действия; Но это не позволит мне сделать это, как сцена является абстрактным классом ..
class Scene {
public:
Scene(void){}
virtual ~Scene(void){}
virtual void update() = 0;
virtual void render() = 0;
};
class SceneManager {
public:
SceneManager(void);
~SceneManager(void);
void setScene(Scene *sc);
Scene* curSc;
}
До сих пор мне кажется, как с помощью указателя в этом случае не так, и это не будет работать .. Но Я хотел бы знать, как достичь функциональности я пытаюсь получить здесь
Спасибо очень
Edit по запросу: , который, как я пытался использовать его:
Во-первых, я производный класс по имени GameScene и здесь:
class GameScene : public Scene
{
public:
GameScene(void);
void render();
void update();
}
в моей основной функции() у меня есть:
GameScene gamescene;
ScreenManager manager;
manager.setScene(&gamescene);
'setScene (& someScene)', скорее всего, привести к ошибке! Вы берете адрес 'someScene', что означает, что' someScene' не является указателем. Теперь вопрос: где живет 'someScene'? Если это локальная переменная, она будет уничтожена, как только вы покинете область, в которой она объявлена, и указатель, хранящийся в «SceneManager», укажет на объект, который больше не существует. Правило большого пальца: не используйте адрес-оператора (и что-то), если вы точно не знаете, что вы делаете. Не используйте указатели, но читайте о умных указателях и используйте их !!! – JohnB