уже известно, функции-члены класса получают скрытый указатель this, 
ссылающийся на объект, для которого была вызвана функция-член. Если 
определяется переменная типа класса TAnyCIass 

    TAnyClass anyvar; 

и вызывается функция-член класса TAnyClass 

    anyvar.AnyFunction();	

    функции AnyFunctionO передается указатель this, ссылающийся на объект 
класса anyvar. Образно выражаясь, this — способ адресации функциями-членами 
данных-членов объекта класса. 
    Для того чтобы избавиться от расходующих время и память передач указателя 
this в стеке, Borland C++ может передавать this в регистре, что экономит 
время, расходуемое на запоминание this в стеке и на ссылки внутри 
функции-члена через хранящийся в стеке указатель. Знание простой, но 
эффективной опции оптимизации fast this может домочь на порядок улучшить 
производительность, особенно в программах, в которых вызывается множество 
мелких функций-членов, — это типичная ситуация, характерная для большинства 
объектно-ориентированных приложений.
    Ближний указатель this передается в регистре si. Дальний указатель this 
передается в паре регистров ds:si, при этом компилятор автоматически сохраняет 
и восстанавливает значение ds в случае необходимости. Для включения опции fast 
this, находясь в DOS, скомпилируйте программу с опцией -ро. Например, можно 
ввести следующую команду: 

    Ьсс -ро myprog 

    Можно    также    установить    опцию    fast    this    из    интегрированной    среды 
Options\Project\Compiler\Code Generation и установки пункта FastThis. 
    В тексте программы, чтобы ввести в действие это соглашение, следует 
использовать следующую директиву #pragma: 

    #pragma option-po 

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

    #pragma option-po

    СОВЕТ

    Как   и  всякий  другой   вид  оптимизации,   применение  опции  fast   
this   не  дает   гарантии  получения положительных   результатов.   Одно   
из   очевидных   отрицательных   последствий   ее   использования   - 
уничтожение содержимого регистровой переменной si. В некоторых случаях можно 
обнаружить, что опция fast this ухудшает быстродействие. Для достижения 
наилучших результатов проверьте производительность вашего кода с включенной и 
выключенной опцией fast this. 

    Исключительные ситуации 

    Исключительные ситуации — новые "любимчики" ANSI C++, но до тех пор, пока 
вы не научитесь ими пользоваться, они могут показаться вам скорее 
дьявольскими, чем любимыми. Немногие программисты на C++ пользуются 
исключительными ситуациями в коммерческих программах — они слишком новы, и 
немногие компиляторы их поддерживают. Конечно, в некоторых библиотеках 
классов, таких как Borland's Object Windows (OWL), исключительные ситуации 
используются весьма интенсивно, так что важно понимать, как они работают. 

    ЗАМЕЧАНИЕ 

    Это введение в исключительные ситуации  —  переработанная глава 2 моей 
книги Mastering Windows Programming with Borland C++ 4. 

    Исключительные ситуации пришли со своей собственной терминологией и 
концепциями. Следующие несколько замечаний призваны помочь вам прочесть и 
понять этот раздел. 
    •   Исключительная ситуация — это не что иное, как условие исключительной 
ситуации, требующее специальной обработки. Исключительные ситуации лучше всего 
использовать для обработки ошибок, возникающих при выполнении, однако их 
применение этим не ограничивается. 
    •   Для возбуждения исключительной ситуации оператор посылает (throw) 
объект, описывающий суть исключительной ситуации. Объект может быть 
литеральным значением, строкой, объектом класса или любым другим объектом. 
(Объект исключительной ситуации не обязательно должен быть объектом класса.) 


    400     Часть III. Программирование на ANSI C++ 
