Не попадитесь:
class AException {Мораль сей басни такова. Когда вы в обработчике исключения попытаетесь обратиться к e.x, он уже будет некорректный, так как экземпляр объекта A будет уничтожен (вызовется деструктор) ДО того, как управление передается обработчику исключения.
public:
const int& x;
AException(const int& _x)
: x(_x)
{
}
}
class A {
private:
int* x;
public:
A()
{
x = new int;
*x = 2;
}
~A()
{
*x = 1;
delete x;
x = NULL;
}
void throw_func()
{
throw AException(*x);
}
};
void a_runner()
{
A a;
a.throw_func();
}
int main()
{
try
{
a_runner();
}
catch(AException& e)
{
cout << "Cought exception with x = " << e.x << endl;
}
}
Как давно это было... Кстати тема по ссылкам в C++ была не самой лёгкой, когда я училась.
ОтветитьУдалить