У меня есть класс object_handler, который заботится о том, чтобы обрабатывать объекты, хранящиеся в его векторе.Удаление объекта через обработчик объекта
class object_handler {
private:
std::vector<object*> m_objects;
// ...
public:
void add(object* x_object);
void remove(object* x_object);
void update();
void render();
// ...
};
Класс объекта является основным объектом я хотел бы использовать в своей игре и что теперь мне нужно сделать для того, чтобы иметь возможности удалить себя, когда это необходимо (например, когда это здоровье опускается ниже нуля). Один из способов, с которым я думал, что это сработает, - это если я дал объектам указатель на их обработчик, чтобы они могли получить доступ к функции удаления обработчика, но это оказалось катастрофой: компилятор начал бросать странные ошибки (например, «ожидаемый»; до * в "object_handler * m_handler" "), я думаю, это потому, что они включают друг друга.
Что было бы правильным способом хранить игровые объекты и обрабатывать их удаление? Было бы очень полезно, если бы объект мог удалять себя, когда он волновал вектор.
Еще один способ, которым я бы работал, если бы объект удалил сам, и вектор столкнется с пустым указателем и удалит его, но я не знаю, насколько это хорошо.
Возможно, ваши «странные ошибки» были решены с помощью прямого объявления. Что касается «правильного способа хранения игровых объектов и обработки их удаления», это полностью зависит от вас. Для такого рода вещей нет «правильного пути» или «неправильного пути». –
Осторожно удалять чужие данные. Если объект удаляется из вектора, в то время как обработчик объекта выполняет итерацию, результаты не будут хорошими. Вероятно, лучше иметь метод «RemoveMe» или аналогично уведомлять «object_handler» о том, что объект можно удалить, когда это безопасно. – user4581301