Во время изучения c ++ я прошел через изучение того, что такое итераторы и как их использовать. Затем я испытал боль от изучения того, что вызывает функция, делает недействительными итераторы и быстро обнаружил их. В последнее время я следил за вопросами и заметил, что очень распространенная тема - это люди, которые не понимают, что вызов vector::erase()
делает недействительными итераторы. Это заставило меня задуматься, существует ли реализация отладки из vector
, которая runtime проверяет на достоверность вектора?
Сначала я думал, что это должен быть обертка вокруг вектора, который в основном отслеживал бы все существующие итераторы, и устанавливал логическое значение isValid
, когда выполнялось действие, которое делало их недействительными. Затем при разыменовании или увеличении можно проверить isValid
.
Это поможет диагностировать более неясные ошибки, когда вызов erase()
вложен (случайно или неосознанно) глубоко в вызов функции, в то время как тот же самый вектор находится в процессе итератора.
Кто-нибудь знает о такой реализации или по каким-либо причинам, почему ее не следует использовать?
РЕДАКТИРОВАТЬ: я использую Linux и G ++.