Абстрактный класс, удаление наследника из std::vector<T>

SFMLoper

При удалении через итератор выбивает ошибку в ходе выполнения программы.Имеется абстрактный класс:
class Fruit :
    public System
{
public:
    sf::RectangleShape shape;
    virtual void Draw() = 0;
 
    Fruit(vec2f position);
    ~Fruit(void);
};
Наследник:
#include "fruit.h"
class Apple :
    public Fruit
{
public:
    virtual void Draw();
    Apple(vec2f position);
    ~Apple(void);
};
Добавляю объект в вектор Fruit*:
fruit.push_back(new  Apple(vec2f(100, 100)));
Удаляю:
for (std::vector<Fruit*>::iterator it = fruit.begin(); it != fruit.end();)
{
    Fruit *fr = *it;
    if(true)
    {
        it = fruit.erase(it); // Ошибка при удалении (
        delete fr;
    }
    else 
    {
        fr->Draw();
        it++;
    }
}
5 ответов

SFMLoper

возможно, накосячили при работе с вектором или еще чем. Здесь я ошибки не вижу, во всяком случае в фрагменте с удалением элемента вектора.P.S. Коли уж SFML, то почему не наследоваться от sf::Drawable и sf::Transformable?


SFMLoper

Это образный пример нерабочего кода. Ошибка звучит как несовместимый тип итератора.Погуглил, нашёл подобные вопросы, но внятного ответа так и не нашёл. Советуют Boost shared_ptr


SFMLoper

Ты рабочий давай, место ошибки и текст ошибки.


SFMLoper

Ты рабочий давай, место ошибки и текст ошибки.
И как вектор fruit объявлен, а то там может тоже что-то не то.


SFMLoper

Сработала магия и все заработало! Извините за беспокойство и спасибо за помощь) Ошибка была допущена мной, т.к. я сразу же добавлял новый фрукт после удаления внутри цикла прохождения итераций.