Некоторые проблемы, которые могут возникать при использовании try-catch в виртуальном наследовании:
- Неоднозначность в цепочке наследования. stackoverflow.com Например, при «алмазном» наследовании, когда у класса несколько предков, компилятор не может понять, к какому именно классу нужно привести объект. stackoverflow.com habr.com
- Не срабатывание блока catch. www.linux.org.ru Это может происходить, например, при множественном наследовании, когда класс двумя путями двусмысленно наследован от определённого класса. www.linux.org.ru
- Неэффективная работа. cpp-kt.github.io Каждый вход в блок try, даже если исключения не происходит, требует времени и памяти. cpp-kt.github.io
- Экстренное завершение программы. cpp-kt.github.io По стандарту, если получено два исключения, происходит экстренное завершение программы. cpp-kt.github.io
Для решения этих проблем можно использовать промежуточные классы, чтобы устранить неоднозначность, или применять другие подходы обработки ошибок. stackoverflow.com