new~

Динамическое выделение памяти и присвоение ссылки.

Синтаксис:

new~<тип данных>;

Описание:

Динамическое выделение памяти и присвоение ссылки. Выделенная память должна быть освобождена при помощи функции dispose.

Пример 1:

p = new~double; //Выделение памяти
~double(p) = 100; //Присвоение    
y = ~double(p); //доступ по ссылке
dispose(p); //Освобождение памяти

В процессе выполнения примера по ссылке p на переменную типа double выделяется память при помощи функции new~. При помощи функции ~ происходит доступ по ссылке к переменной и приравнивание ей значения 1000. Переменной y присваивается значение 1000 по ссылке p. Перед завершение примера происходит освобождение памяти при помощи функции dispose.

Пример 2:

initialization

//В этом массиве мы будем хранить указатели на матрицы
//он должен быть комплексного типа
var ptrs_array: carray;

//Создание
ptrs_array = 100#0; 
for(i=1,100) begin
//Вот так мы выделяем память
ptrs_array[i]=new~matrix;
//Присваиваем значение матрицы
~matrix(ptrs_array[i])=[[1,2],[3,1]];
end;

//Чтение - тут мы суммируем детерминанты матриц
summ = 0;
for(i=1,100) begin
dd = det(~matrix(ptrs_array[i]));
summ = summ + dd;
end;

//Уничтожение объектов после того, как мы закончили их использование
for(i=1,100) begin
dispose(ptrs_array[i]);
end;

end;

Пример показывает использование массива указателей на 100 матриц и последующее обращение к каждой из них.