Хорошая или плохая практика делать чистые виртуальные функции noexcept? Я всегда думал, что мы не должны вводить дополнительное ограничение на его классы реализации, что их реализация не должна быть броском, поскольку это может привести к модификации в реализации и ненужным блокам catch try для предотвращения исключения. я думал, что реализация должна решить, может ли функция отмечена как noexcept, а не спецификация исключения должна решить реализацию?хорошая или плохая практика, чтобы сделать чистые виртуальные функции noexcept
Может кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь здесь?
Я бы сказал, что, если вам нужно использовать эту конструкцию, то есть что-то не так с вашим дизайном. Чтобы иметь возможность правильно обрабатывать исключения реализации, базовому классу нужно было бы слишком много знать о его производных классах. – MicroVirus
Я согласен с базовым классом MicroVirus не должен много думать о производных классах, поэтому на первом месте я всегда стесняюсь ставить noexcept, даже если операция выглядит слишком тривиальной. –
@MicroVirus. Что-то вроде этого может быть полезно в качестве защиты от реализаций, которые могут неожиданно возникать в ситуациях когда вы вообще не контролируете реализацию. Мало что вы можете сделать, чтобы обрабатывать исключение * и * продолжать, как будто ничего не произошло, поэтому обработчик исключений должен регистрироваться и помогать остальной части кода законно прекращаться. – dasblinkenlight