Как обработать исключение? - PullRequest
3 голосов
/ 23 сентября 2011
#include<iostream>
using namespace std;
class test
{
    public:
        test()
        {
            cout<<"hello";}
            ~test()
            {
                cout<<"hi";
                throw "const";
            }
            void display()
            {
                cout<<"faq";
            }
};
int main()
{
    test t;
    try{
    }
    catch(char const *e)
    {
        cout<<e;
    }
 t.display();
}

выход: output:

Я знаю, выбрасывая исключение из деструктора, я нарушаю основные законы С ++, но все же хочу знать, есть ли у них какой-либо способ обработки исключения.

Ответы [ 4 ]

4 голосов
/ 23 сентября 2011

Ваш деструктор работает за пределами блока try - catch - область действия t - это функция main. но тогда возникает исключение из деструктора: Плохая идея TM .

3 голосов
/ 23 сентября 2011

В вашем блоке try ничего нет. Попробуйте это:

try
{
    test t;
}
catch(char const *e)
{
    cout << e;
}

Кроме того, генерация исключения в деструкторе - это плохая идея (как и в большинстве правил, есть исключения).

3 голосов
/ 23 сентября 2011

Создание вашего тестового объекта должно быть сделано внутри блока try:

try
{
 test t;
 t.Display();
}

и полная версия:

 #include<iostream>
using namespace std;

class test
{
    public:
        test()
        {
            cout << "hello" << endl;
        }

        ~test()
        {
            cout << "hi" << endl;
            throw "const";
        }
        void display()
        {
            cout << "faq" << endl;
        }
};

int main()
{
    try
    {
        test t;
        t.display();
    }
    catch(char const *e)
    {
        cout << e << endl;
    }
}
1 голос
/ 23 сентября 2011

Почему бы просто не вызвать функцию деструктора явно в блоке try?

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