И так... item - ссылка, которая может вернуть список значений:
const std::list<std::string> &values = item->getValues();
После по этому списку пробегаюсь итератором и делаю некоторую работу с элементами.
При этом, существует вероятность, что в другом потоке значения item могут быть изменены, как в моё случае, очищены.
При следующем же обращении к итератору попадаем в ситуацию... crash!.
Всё дело в том, что &values есть ссылка на значения, которая к этому моменту уже перестала быть актуальной.
Поэтому, дабы избежать такой ситуации, можно получить копию списка item'а (копия будет создана автоматически через copy constructor std::list):
const std::list<std::string> values = item->getValues();
ps. разница только в одном символе &, но разница колоссальная.
Комментариев нет:
Отправить комментарий