Я делаю игру на C++, и я хочу, чтобы мой класс Game удерживал все GameObjects. Он имеет вектор абстрактного базового класса геймобжекты, но для того, чтобы удерживать полученные типы, он должен быть вектором указателей на геймобжекты:Как содержать производные типы в векторе?
// Game.h
class Game {
private:
std::vector<GameObject*> gameObjects;
public:
void addGameObject(GameObject* gameObject) {
gameObjects.push_back(gameObject);
}
}
Проблема, которая возникает случается, когда я хочу добавить GameObjects к вектор. Когда я передаю указатель на addGameObject, указатель становится NULL в другой области. Поэтому я хотел бы, чтобы указатель хранился в векторе, но не сразу стал NULL. Я не знаю, как мне обойти эту проблему. Есть идеи?
Редактировать: Спасибо всем, что комментировали. Я использовал C++ некоторое время, но я новичок в использовании указателей и пока не понимаю их полностью. Я знал, что вам нужно использовать их для создания вектора, в котором хранятся производные объекты. Наверное, мне нужно исследовать указатели намного больше.
Почему указатель становится NULL в другом пространстве? Покажите этот код, пожалуйста. –
Проблема в другом месте. Поведение, которое вы описали, не имеет никакого отношения к 'vector :: push_back'. – Pradhan
Это не имеет смысла. Указатели передаются по значению, и нет никакой функции 'addGameObject', чтобы сделать исходный указатель' NULL'. Во всяком случае, современный C++ должен, вероятно, использовать интеллектуальные указатели. – 5gon12eder