Возможно ли это?
Да, это исключение будет обрабатываться обработчиком уровня функции точно так же, как и любой другой, инициированный инициализатором элемента. Обратите внимание, что в функции-try-block конструктора исключение возвращается после обработки. Это то, что вы хотите, если инициализация под-объекта не удалась, поскольку полный объект недействителен.
И что говорит об этом последний стандарт ISO C++?
Я не C++ 14 пока нет, но C++ 11 сказал:
15/4: Исключение брошено во время выполнения соединения-оператора или, для строителей и деструкторы, во время разрушения инициализации или, соответственно, подобъектов в классе, передает управление обработчиком в функции-Try-блоке таким же образом, как исключение, брошенном во время исполнения пытаясь угадать блок передачи управление другими обработчиками.
и 15.3/15 указывает, что в этом случае он будет восстановлен.
Должен ли я обычно использовать эту конструкцию?
Возможно, нет - мало что можно сделать, чтобы справиться с провалом инициализации подобъекта, поэтому обычно нет смысла в поиске и повторном исключении. Возможно, вы захотите сообщить об ошибке по мере прохождения исключения.
Я уверен, что исключение будет восстановлено, если вы его поймаете. – chris
Почему так? Вы можете объяснить? – AnArrayOfFunctions
Ах, * Исключенное в настоящее время исключение отменяется, если элемент управления достигает конца обработчика функции-try-block конструктора или деструктора. * – chris