4.5 Инициализация переменных (по умолчанию) |
Вверх Предыдущий Следующий |
Некоторые переменные должны быть инициализированы, поскольку они содержат управляемые типы. Для переменных, объявленных в разделе var функций (процедур) или основной программы, это делается автоматически. Для переменных, которые выделяются в куче, это не так. Для этого компилятор содержит внутреннюю функцию Default. Эта функция принимает идентификатор типа в качестве аргумента, и возвращает правильно инициализированную переменную этого типа. По сути, функция обнулит всю переменную. Ниже приведен пример её использования: type TRecord = record i: LongInt; s: AnsiString; end;
var i: LongInt; o: TObject; r: TRecord; begin i := Default(LongInt); // 0 o := Default(TObject); // Nil r := Default(TRecord); // ( i: 0; s: '') end. Случай, когда переменная выделяется в куче, более интересен: type TRecord = record i: LongInt; s: AnsiString; end;
var i: ^LongInt; o: ^TObject; r: ^TRecord; begin i:=GetMem(SizeOf(Longint)); i^ := Default(LongInt); // 0 o:=GetMem(SizeOf(TObject)); o^ := Default(TObject); // Nil r:=GetMem(SizeOf(TRecord)); r^ := Default(TRecord); // ( i: 0; s: '') end. Это функция работает для всех типов, кроме различных типов файлов (или сложных типов, содержащих тип файла).
|