Как стать автором
Обновить

Проверка игрового движка qdEngine, часть первая: топ 10 предупреждений PVS-Studio

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров2.2K
Всего голосов 8: ↑10.5 и ↓-2.5+13
Комментарии14

Комментарии 14

Добрый день, я из Ассоциации К-Д Лаб и я занимался публикацией этого кода. :)

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

Я помню вы делали разбор кода Вангеров, а вы не думали делать обзор кода Самогонок, Периметра или VistaEngine? Они точно работают с соответствующими играми.

Актуален код или нет, особенного значения не имеет :). Главное, он исторически интересен, даёт возможность поговорить про статический анализ и рефакторинг (про это будет в следующих частях). За идеи по проверке спасибо, передам коллегам подумать.

Ну код конечно мда, смотришь и плакать хочется

Реальный код реального проекта :). Это только в книгах всё идеально :)

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

Дэвид Парнас и Пол Клементс (David Parnas and Paul Clements)

В таком случае следует заменить тип int на atomic_int:

А не стрельба по воробьям? простого volatile должено хватить

Даже любопытно, остались ли платформы способные запустить данный код, где int не атомарный по умолчанию...

Дело не только в атомарности изменения, а еще и работе с памятью, кешами и прочим; спинлок и еще что там требуется ( https://github.com/microsoft/STL/blob/main/stl/inc/atomic#L630 )
Впрочем, может оно и не лишнее, опять же, будет гарантировать что изменение в одном потоке действительно будет видно в другом потоке (чего простое добавление volatile не сделает)

Я стараюсь учить в статьях хорошему :)

Я тоже допускаю опечатки :) Fixed

Предупреждение N5: деструктор не является виртуальным

Мне кажется или это ложное срабатывание?

Почему?

В этом классе есть виртуальные функции. Следовательно, предполагается, что от этого класса будут наследоваться другие классы. А раз так, то и деструктор следует объявить как виртуальный.

А, я понял, просто варнинг двусмысленно написан. Как будто он хочет виртуальный деструктор у PtrHandle.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий