Представлен набор способов обнаружения висячих указателей в C++
Новости
Их автор, эксперт по C++ Герб Саттер, отметил, что предложения могут войти в стандарт языка, если заинтересуют комиссию по стандартизации.
2К открытий2К показов
Эксперт по C++ Герб Саттер (Herb Sutter) опубликовал статью о том, как можно выявлять наиболее частые случаи возникновения висячих указателей в программах, написанных на C++. По его словам, она преследует лишь информационные цели, однако предложения могут войти в стандарт языка, если ими заинтересуется комиссия по стандартизации.
Почему это важно?
Висячие указатели появляются при перемещении или удалении объектов, если при этом значение указателя не изменено на нулевое. Даже если система перераспределит освобожденную память под другие данные, указатель все равно будет ссылаться на прежние ячейки. Это может привести к непредсказуемому поведению программы.
И что за предложения?
Описанный подход предлагает оперировать переменными двух типов: Owner (контейнеры или умные указатели), и Pointer (итераторы, string_view
, span
). Затем разработчики могут использовать локальный ACFG-анализ (acyclic control flow graph, ациклический граф потока управления), чтобы отслеживать, на что указывает каждый Pointer, и выявлять случаи, когда изменение Owner делает Pointer недействительным.
В анонсе к статье Саттер отметил, что эти предложения можно посчитать рисковой попыткой решить сорокалетнюю проблему. И если бы наиболее крупные поставщики расширений под C++ реализовали всплывающие при компиляции предупреждения о висячих указателях, стандартизация и вовсе была бы не нужна.
2К открытий2К показов