Вопрос

Мы считаем, что может произойти исключение в инициализации.Итак, мы пишем Try / Catch Block.

int f(){
    throw 1;
}

class A
{
public:
    A() try : _k(f())
    {}
    catch (int)
    {
        std::cout << "Exception 1" << std::endl;
    }

private:
    int _k;
};
.

Но исключение потягиваний на один уровень глубже.Это означает, что следующий код

try
{
    A a;
} catch(int)
{
    std::cout << "Exception 2" << std::endl;
}
.

выводится:

Exception 1
Exception 2
.

Почему этот блок Thry / Catch ведет себя не так же, как обычный блок Try / Catch?

Полный код примера: http://ideone.com/xjy2d

Это было полезно?

Решение

Кажется, ваш вопрос: Почему уровень функции пытается автоматически Rethrow Excloin?Сбрасывать исключение из конструкции объекта, этот объект считается мертвым до того, как речь идет о жизни.Все его сусообъекты разрушены.То есть, если исключение брошено во время строительства, нет объекта.Если исключение не бросится, вы бы получили корпус объекта в свои руки.Это явно не желательно.

Другие советы

Объект, который вы строите, на самом деле не построен, поэтому простое возвращение не является опцией.Этот вид Try0-Catch всегда вентиляции (если только вы не бросите свой исключение из олова PALL).

Потому что это не обычный блок Try-Catch, кроме как на уровне функциональности / улов.Он автоматически образуется, если вы не сделаете это явно с помощью throw.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top