Нужно ли запретить итераторы в C++ для повышения безопасности?

Итераторы в C++, реализованные на основе адресной арифметики, могут приводить к ошибкам, поскольку их легко сделать недействительными после модификации исходных данных, из которых они были получены. Проблема заключается в отсутствии контекста у итераторов, являющихся, по сути, указателями на память. Это приводит к таким проблемам, как циклические ссылки и утечки памяти.
Нужно ли запретить итераторы в C++ для повышения безопасности?
Изображение носит иллюстративный характер

Для решения этих проблем предлагается использовать плагин компилятора, который отслеживает взаимосвязь между итераторами и исходными данными. Плагин должен выявлять модификации данных, делающие итераторы недействительными, и выдавать предупреждение или ошибку. Для этого плагин будет отслеживать присваивания новых значений исходным данным, передачу данных в качестве неконстантных аргументов функций, а также вызовы модифицирующих методов.

Один из предложенных подходов заключается в обертывании итераторов прокси-классом, который связывает их с исходным контейнером. Этот прокси-класс будет выполнять отложенный вызов метода итерирования только в момент обращения к итератору, что исключает использование недействительных итераторов. Такой подход, вероятно, потребует запретить прямое использование итераторов и разрешить их только через прокси-класс, контролируемый плагином компилятора.

Несмотря на то, что полная реализация данного подхода еще не завершена, предварительные результаты позволили определить окончательную архитектуру плагина компилятора. В частности, для анализа AST (абстрактного синтаксического дерева) было решено использовать RecursiveASTVisitor вместо AST Matcher, так как первый метод позволяет более гибко управлять обходом дерева и проще обеспечивает контекстную информацию при анализе кода.


Новое на сайте

20099Нейронаука одиночества: есть ли в мозге клетки, которые страдают? 20098Почему глаза так долго привыкают к темноте — и что за этим стоит? 20097Мыть или не мыть рис: что реально происходит в кастрюле 20095Мне не предоставили текст для написания статьи. 20094Мыть или не мыть рис: что реально происходит в кастрюле 20092Почему глаза так долго привыкают к темноте — и что за этим стоит? 20087Игла сквозь череп: медицинский случай с рыбой-иглой и задачей, которую хирурги решали... 20085Живая квантовая сеть в Нью-Йорке: как Qunnect пытается построить интернет, который нельзя... 20084Живые обои: дрожжи, алгинат и 3D-принтер вместо поклейки 20083ИИ-агент уничтожил базу данных за 9 секунд и сам же признался в этом 20082CVE-2026-5027: почему уязвимость в Langflow уже активно эксплуатируется хакерами? 20081GreatXML: новый обход BitLocker через Recovery Partition 20080Июньский Patch Tuesday 2026: 206 уязвимостей, три zero-day и неуправляемый ИИ в поиске дыр
Ссылка