|
Справочное руководство по C++Если объект не был построен полностью, то деструкторы вызываются только для полностью построенных вложенных в него объектов. Кроме того, если особая ситуация запускается в конструкторе при построении элемента автоматического массива, то уничтожаться будут только уже построенные элементы этого массива. Процесс вызова деструкторов для уничтожения автоматических объектов, построенных в ходе выполнения программы от начала проверяемого-блока до выражения-запуска, называется "раскручиванием стека". R.15.4 Обработка особой ситуации Обработчик типа T, const T, T& или const& сопоставим с выражением-запуска, имеющим операнд типа E, если: [1] T и E являются одним типом; [2] T является доступным (§R.4.6) базовым классом E в точке запуска; [3] T является типом указателя, а E является таким типом указателя, который можно в точке запуска преобразовать в T с помощью стандартных преобразований указателя (§R.4.6). Рассмотрим пример: class Matherr {/*… */ virtual vf(); }; class Overflow: public Matherr {/*… */}; class Underflow: public Matherr {/*… */}; class Zerodivide: public Matherr {/*… */}; void f() { try { g(); } catch (Overflow oo) { //… } catch (Matherr mm) { //… } } Здесь обработчик Overflow будет перехватывать ситуации типа Overflow, а обработчик Matherr будет перехватывать ситуации типа Matherr и всех типов, являющихся общими производными от Matherr, включая Underflow и Zerodivide ...» |
Код для вставки книги в блог HTML
phpBB
текст
|
|