Borland Pascal. Руководство пользователя
6cac1dc9

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



Содержание раздела