Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обобщенные подпрограммы в качестве параметров

Поиск

Обобщенные подпрограммы в качестве параметров

Обобщенная подпрограмма может выступать в качестве формального параметра другой обобщенной подпрограммы.

Например, в классе System.Array имеется несколько статических обобщенных методов с обобщенными подпрограммами в качестве параметров. Так, System.Array.Find имеет следующий прототип:

System.Array.FindAll<T>(a: array of T; pred: function(x: T): boolean): array of T;

и возвращает подмассив массива a элементов T, удовлетворяющих условию pred.

Приведем пример вызова этой функции:

function f(x: integer): boolean;
begin
Result := x mod 2 = 0;
end;

var a: array of integer := (1,3,6,5,8);
var b := System.Array.FindAll(a,f);

Здесь возвращается массив b, содержащий все четные значения массива a в том же порядке.

Управление памятью

Все ссылочные типы в .NET находятся под управлением так называемого сборщика мусора. Это значит, что выделенная вызовом конструктора память никогда не возвращается явно вызовом деструктора. После того как объект становится не нужным, ему следует присвоить nil.

При нехватке динамической памяти выполнение программы приостанавливается, и запускается специальная процедура, называемая сборкой мусора. Она определяет все так называемые достижимые объекты. Если на данный объект более никто не указывает, то он считается недостижимым и будет собран сборщиком мусора. Время вызова сборщика мусора считается неопределенным.

Например, при выполнении участка кода

type
Person = class
...
end;
var p: Person := new Person('Иванов',20);
...
p := nil;

память, отведенная под p, после присваивания ей nil станет недостижимой и будет собрана в непредсказуемый момент.

Отметим, что динамическая память, выделяемая процедурой New, не находится под управлением сборщика мусора, поэтому нуждается в явном освобождении вызовом процедуры Dispose. Именно поэтому работа с обычными указателями считается в PascalABC.NET устаревшей и не рекомендуется к использованию.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 2; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.177.204 (0.005 с.)