> Совсем конкретно не нашёл, но > > "Служебным является и слово catch. После него идет в > скобках описание, которое используется аналогично описанию > формальных параметров функции, а именно, в нем задается тип > объектов, на которые рассчитан обработчик, и, возможно, > имена параметров" > В функциях класс, переданый по ссылке не копируется. > Да и зачем его копировать. > Сас Страуструп у себя в примерах различает catch(ce &e) и > catch(ce e). А тут выходит различия нет
Различие есть, во втором варианте еще раз вызывается конструктор копирования
catch(ce &e)
ce 0x19390fec
cec 0x1ad6003e
~ce 0x19390fec
catch 0x1ad6003e
~ce 0x1ad6003e
ce 0x19360fec
~ce 0x19360fec
catch 0x1ad3003e
~ce 0x1ad3003e
catch(ce e)
ce 0x19380fe0
cec 0x1ad5003e
~ce 0x19380fe0
cec 0x19380ff0 - еще один вызов констр. копирования
catch 0x19380ff0
~ce 0x1ad5003e
~ce 0x19380ff0
А вот что пишет Borland по этому поводу
Syntax
throw assignment-expression
Description
When an exception occurs, the throw expression initializes a temporary object of the
^^^^^^^^^^^^^^
type T (to match the type of argument arg) used in throw(T arg). Other copies can be generated as required by the compiler. Consequently, it can be useful to define a
copy constructor for the exception object.
^^^^^^^^^^^^^
---
Так что вроде бы все так и должно быть
|