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