Сбой после ловли исключения - PullRequest
8 голосов
/ 18 июля 2011

Почему происходит сбой после перехвата std :: bad_exception?(Я использую VC7)

#include "stdafx.h"
#include <exception>

int validateInt (int x) throw (int,std::bad_exception) {
    if ( 0 == x ) {
        throw std::bad_exception("x");
    }
    return x;
}

class C {  
    int i;    
public:  
    C(int);  
};  

C::C(int ii)  
try : i( validateInt(ii) ) {  
    std::cout << "I'm in constructor function body\n";
} catch (std::exception& e) {  
    std::cout << "I caught an exception...\n";
}

int _tmain(int argc, _TCHAR* argv[]) {
    C a(0);
    return 0;
}

1 Ответ

12 голосов
/ 18 июля 2011

Поскольку вы не можете остановить исключения из списка инициализации конструктора. После того, как вы поймали его, он автоматически перебрасывается. (Затем происходит сбой, потому что у вас есть неустановленное исключение.)

Это хорошо: если ваши члены не могут быть должным образом инициализированы, ваш класс не может должным образом существовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...