Конструктор Динамического массива

На верх  Назад  Вперёд

В версии 3.0 Free Pascal, тип динамические массивы имеют конструктор. Это обеспечивает компилятор из внутреннего устройсва динамических массивов. До версии 2.6.4, был единственный способ инициализировать динамические массивы следующим образом:

Type

TIntegerArray = Array of Integer;

 

var

A : TIntegerArray;

begin

SetLength(A,3);

A[0]:=1;

A[1]:=2;

A[3]:=3;

Writeln(Length(A));

end.

В версии 3.0 Free Pascal, динамический массив можно инициализировать с помощью конструктороподобного синтаксиса. Вызывается конструктор Create, и принимает в качестве параметров значения, тип которых соответствует типу элементов массива, а количество - будет определять размерность массива. Это означает, что приведённая выше инициализация может быть сделана, так:

Type

TIntegerArray = Array of Integer;

 

var

A : TIntegerArray;

begin

A:=TIntegerArray.Create(1,2,3);

Writeln(Length(A));

end.

Обратите внимание, что это не будет работать для динамических массивов, для которых не был создан свой тип. То есть, следующий код работать не будет:

var

A : Array of Integer;

begin

A:=Array of Integer.Create(1,2,3);

Writeln(Length(A));

end.

Этот подход также работает рекурсивно, для многомерных массивов:

Type

TIntegerArray = Array of Integer;

TIntegerArrayArray = Array of TIntegerArray;

 

var

A : TIntegerArrayArray;

begin

A:=TIntegerArrayArray.Create(TIntegerArray.Create(1,2,3),

                              TIntegerArray.Create(4,5,6),

                              TIntegerArray.Create(7,8,9));

Writeln(’Length ’,length(A));

end.

Однако, поскольку он является конструктором (его код выполняется во время выполнения) не представляется возможным использовать его в синтаксисе инициализации переменной. То есть, следующий код работать не будет:

Type

TIntegerArray = Array of Integer;

 

var

A : TIntegerArray = TIntegerArray.Create(1,2,3);

begin

Writeln(’Length ’,length(A));

end.