Почему нет очистки, если предварительное условие контракта не удается?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему нет очистки, если предварительное условие контракта не удается?

Сообщение Anonymous »

c ++ 26 введет спецификаторы контрактов функции, которые представляют собой утверждения контракта, связанные с функцией для выражения и проверки до- и пост- или пост -кондиционирование не выполняется, продолжая выполнять функцию не является бессмысленной, поэтому в настоящее время это общепринято выходить из функции при обнаружении, бросая исключение или иным образом < /li>
[*] Хотя некоторые языки используют исключения для сигнальных предварительных условий, C ++, по -видимому, уходит от того, что исключения, которые будут использоваться только для того, чтобы на открытом факторе (так, как это может быть наверняка, из -за того, что не может быть наверняка, из -за того, что на нет никаких факторов. разрешения)

Поэтому неудивительно, что нарушение контракта приведет к прекращению программы, но это сделает это через std :: verminate () или std :: abort () , ни один из которых не позволяет отменить стек и вызовать деструкторы, т.е., чтобы выполнить чистку через raii. Мне кажется, всегда предпочтительнее выполнять очистку, если это возможно (например, некоторые из моего кода сообщают оборудованию для периодического отправки сообщений через автобус, я говорю им, чтобы они остановились на выходе из программы через деструктор, и я все равно хотел бы сделать это, если я обнаружил нарушение). < /p>
есть причина, которые я не должен использовать, вместо того, чтобы это было наказывать, когда это будет называться, когда это будет называться, когда это будет называться. /> (И в этом отношении, есть ли способ реализовать такую функцию? Я не могу найти способ расслабиться и вызовать деструкторы, кроме того, что бросить исключение) < /p>

Подробнее здесь: https://stackoverflow.com/questions/797 ... tion-fails
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»