Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатические члены от этого класса или его основ
Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатические члены от этого класса или его основ.
Обработчик 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® флаги оператор:
Нестатические члены объекта
Базовые классы объекта
Нестатические члены базовых классов
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Обработка исключений |
Категория: необходимый |