Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатические члены от этого класса или его основ
Примечание
Используйте Bug Finder вместо Code Prover для проверки правил кодирования. Поддержка кодирования правил, регистрируясь в Code Prover будет удалена в будущем релизе. См. Вопросы совместимости.
Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатические члены от этого класса или его основ.
Обработчик catch блоки функционального try блок обрабатывает исключение, которые повышены от тела функции и списка инициализаторов. Когда используется в конструкторах класса и деструкторах, они catch блоки могут обработать исключения, которые возникают во время создания или разрушения класса нестатические члены. Таким образом, catch блоки могут быть выполнены прежде или после времени жизни нестатических членов класса. Если к нестатическим членам класса получают доступ в таком catch блоки, компилятор может попытаться получить доступ к объектам, которые еще не созданы или уже удалены, который является неопределенным поведением. Например:
class C{
private:
int* inptr_x;
public:
C() try: inptr_x(new int){}
catch(...){
intptr_x = nullptr;
//...
}
};C реализован при помощи функционального try блокируйтесь, чтобы обработать любое исключение, являющееся результатом операции выделения памяти в списке инициализаторов. В catch блок этой функции-try блокируйтесь, член класса C.intptr_x получен доступ. Блок выгоды выполняется когда выделение памяти для intptr_x не пройдено. Таким образом, блок выгоды пытается получить доступ к члену перед своим временем жизни, которое является неопределенным поведением.Чтобы избежать неопределенного поведения, избегайте использования нестатических элементов данных или базовых классов объекта в блоке выгоды реализации функционального блока попытки его конструкторов и деструктора.
Если оператор в блоке выгоды конструктора или функции-try деструктора доступы к блоку любой из них, Polyspace® флаги оператор:
Нестатические члены объекта
Базовые классы объекта
Нестатические члены базовых классов
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
| Группа: Обработка исключений |
| Категория: необходимый |