Руководство по языку B.Pascal 7




Конструкторы и деструкторы


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

Для конструкторов параметр таблицы виртуальных методов со- держит смещение таблицы виртуальных методов для запоминания поля Self таблицы виртуального метода, чтобы инициализировать Self.

Более того, если конструктор вызывается для размещения дина- мического объекта с помощью расширенного синтаксиса стандартной процедуры New, через параметр Self передается указатель nil. Это заставляет конструктор размещать новый динамический объект, адрес которого передается вызывающей программе через DX:AX при возврате из конструктора. Если конструктор не может разместить объект, то в DX:AX возвращается пустой указатель nil. (См. далее "Обнаруже- ние ошибок конструктора").

Наконец, если конструктор вызывается с использованием уточ- ненного идентификатора метода (т.е. идентификатора типа объекта, за которым следуют точка и идентификатор метода), то в параметре таблицы виртуальных методов передается нулевое значение. Это яв- ляется указанием конструктору на то, что ему не следует инициали- зировать поле Self таблицы виртуальных методов. Для деструкторов нулевое значение параметра таблицы виртуальных методов означает обычный вызов, а ненулевое указывает, что деструктор был вызван с использованием расширенного синтаксиса стандартной процедуры Dispose. Это заставляет деструктор удалить Self непосредственно перед возвратом (размер Self определяется из первого слова Self в ТВМ).




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