Ну, большинство людей регистрируют Исключение непосредственно перед тем, как его выбросить. Однако выполнение этого в конструкторе исключения имеет свои достоинства, если вы все делаете правильно; D
Правильное выполнение означает, что вам нужен еще один уровень наследования. Таким образом, вы можете сделать это в централизованном конструкторе (в любом случае у вас должен быть один базовый класс Exception для «компонента» вашей системы). Исключение промежуточного уровня будет иметь ctor, который принимает сообщение и регистрирует его. Что ж, в Java промежуточное исключение может вызывать метод, который может быть перезаписан в производных классах, но это невозможно в C ++.