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

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

Сообщение Anonymous »

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

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

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

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