В настоящее время я работаю над базой кода, которая построена на основе песка.
В предположительно проверенных библиотеках существует множество классов, которые нарушают «Правило 3». Большинство объявляет нетривиальный деструктор, но в нем отсутствует либо конструктор копирования, либо оператор присваивания.
Существуют ли какие-либо флаги компилятора (gcc) или инструменты статического анализа, которые предупреждают, когда класс нарушает правило 3?
В настоящее время мы используем Coverity с GCC версии 4.4.
Прикрытие имеет. Мы используем версию 6.5. Есть проверка MISSING_COPY_OR_ASSIGN.
Тест C ++ от Parasoft (коммерческий инструмент) имеет правило (MRM-40), которое охватывает «последовательно копировать и уничтожать», которое выглядит так, как будто оно вам поможет. По сути, в нем говорится, что если вы определяете какой-либо из конструктора копирования, оператора копирования или деструктора, вам может потребоваться определить один или оба других.
Больше информации на http://www.parasoft.com/jsp/products/cpptest.jsp