Размещение и инициализация с помощью процедуры New
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 поможет
вам в конструкторах выполнить восстановление при ошибке
(см. Главу 9 в "Руководстве по языку").