есть вектор умных указателей на класс А
_result = vector<shared_ptr<A>>;
нужно удалить все классы из ветора по по условию(ограничен с++14), делал так:
for (auto iter = _result.begin(); iter != _result.end(); ) {
auto pointer = *iter;
auto a = *pointer;
if (a.getValue() == value) {
iter = _result.erase(iter);
} else {
iter++;
}
}
получил сегфолт
типа не гоже вызывать 2 раза подряд на один и тот же класс А деструктор
перестало падать когда написал так:
for (auto iter = _result.begin(); iter != _result.end(); ) {
if ((**iter).getValue() == value) {
iter = _result.erase(iter);
} else {
iter++;
}
}
почему так ?
У вас там класс копируется и копия разрушается. Наверное у вас там деструктор криво написан
в деструкторе сделал printf и увидел что два раза вызывается
На одном и том же объекте? Или на разных?
на одном и том же
Это как так
это ты по адресу this проверил?
нет, сейчас перепроверил на this - разные, походу начинаю понимать вчем проблема
Обсуждают сегодня