С++ для начинающих



         

Конструкторы и функциональные try-блоки - часть 2


Использование функционального try-блока – это единственное решение, гарантирующее, что все исключения, возбужденные при создании объекта, будут перехвачены в конструкторе. Для конструктора класса Account такой try-блок можно определить следующим образом:

inline Account::

Account( const char* name, double opening_bal )

try

       : _balance( opening_bal - ServiceCharge() )

{

   _name = new char[ strlen(name) + 1 ];

   strcpy( _name, name );

   _acct_nmbr = get_unique_acct_nmbr();

}

catch (...) {

   // теперь специальная обработка

   // перехватывает исключения,

   // возбужденные в ServiceCharge()

}

Обратите внимание, что ключевое слово try находится перед списком инициализации членов, а составная инструкция, образующая try-блок, охватывает тело конструктора. Теперь предложение catch(...) принимается во внимание при поиске обработчика исключения, возбужденного как в списке инициализации членов, так и в теле конструктора.




Содержание  Назад  Вперед