Borland Pascal расширяет синтаксис процедуры New, что является более компактным и более удобным средством выделения пространства для объекта в динамически распределяемой области памяти и инициализации объекта с помощью только одной операции. Теперь процедура New может вызываться с двумя параметрами: имя указателя используется в качестве первого параметра, а вызов конструктора в качестве второго параметра:
New(P, Init("Sara Adams", "Account manager", 2400));
Если для процедуры New используется расширенный синтаксис, то конструктор Init действительно выполняет динамическое размещение, используя специальный код входа, сгенерированного как часть компиляции конструктора. Имя реализации не может предшествовать Init, т.к. в то время, когда процедура New вызвана, реализация, инициализируемая с помощью Init, еще не существует. Компилятор идентифицирует правильный вызываемый метод Init посредством типа указателя, пересылаемого в качестве первого параметра.
Процедура New также была расширена для возможности использования ее как функции, которая возвращает значение указателя. Посылаемый New параметр является типом указателя на объект, а не самой переменной-указателем:
tyрe PSalaried = ^TSalaried;
var P: PSalaried; P := New(PSalaried);
Обратите внимание, что в данной версии функциональная форма расширения процедуры New применима ко всем типам данных, а не только к типам объектов.
Функциональная форма New, как и процедурная форма, также может воспринимать конструктор объектного типа в качестве второго параметра:
P := New(PSalaried, Init("Sara Adams", "Account manager", 2400));
В Borland Pascal осуществлено также параллельное расширение процедуры Disрose, это подробно обсуждается в следующем разделе.
Примечание: Новая стандартная процедура Fail поможет вам в конструкторах выполнить восстановление при ошибке
8 8 8
| |