Если конструктор не будет noexcept, и конструктор не может закончить объектную инициализацию, то это должно освободить ресурсы объекта, и это должно выдать исключение
Если конструктор не будет noexcept, и конструктор не может закончить объектную инициализацию, то это должно освободить ресурсы объекта, и это должно выдать исключение.
Когда конструктор резко отключает из-за необработанного исключения или привел динамическое распределение ресурсов к сбою, оно может оставить некоторые объекты в частично созданном объекте, который является неопределенным поведением. Прежде, чем повысить исключения в конструкторах класса, освободите уже выделенные ресурсы. При выделении ресурсов задайте new
операция как std::nothrow
. В качестве альтернативы выполните распределение ресурсов в try
или function-try
блокируйтесь, чтобы обработать исключения, которые могут явиться результатом не пройдено выделения.
Polyspace® отмечает throw
или new
оператор вне try
блокируйтесь в non-noexcept
конструктор класса, если оператор может привести к утечке ресурсов. Например:
throw
оператор вне try
блок отмечается, если выделенные ресурсы не освобождены перед оператором.
new
оператор отмечается, если он не задан как std::nothrow
или перенесенный в try
или function-try
блок.
Polyspace игнорирует классы, которые остаются неиспользованными в вашем коде.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Обработка исключений |
Категория: Необходимый, Частично автоматизированный |