шпиён wrote:tchicago wrote:roadman wrote:Достоинства и недостатки двух методов обработки exceptionCode: Select all
class exep
{
public:
exep(int err) : _error(err) {}
int get_code() const { return _error; }
private:
int _error;
};
int main()
{
try
{
throw new exep(1);
}
catch (exep* x)
{
cout << x->get_code();
delete x;
}
try
{
exep x(1);
throw x;
}
catch (exep& x)
{
cout << x.get_code();
}
А почему этот вопрос никто не удостоил вниманием? Все слишком просто или слишком сложно?
С первого взгляда кажется просто.
1) Лишняя аллокация/деаллокация памяти. Да еще и лик может быть, если из catch своё исключение бросится до delete.
2) Лишнее копи-конструирование, что для приведенного в примере exep не хуже копирования указателя в случае 1, но для больших/сложных классов может быть дорого.
На мой взгляд, метод 2 однозначно лучше, т.к. за расчет на высокую скорость обработки исключений надо anyway бить лопатой по голове.
А со второго?
![Wink :wink:](./images/smilies/icon_wink.gif)
Именно ексепшн имеется ввиду.
P.S. Седни думать заставили...
Кстати, шпиен, где написано что нью бросает ексепшн? В стандарте? В АРМ такого нет. Настолько привык к етим догмам, что и не думал..