6.3 Экземпляр класса

Вверх  Предыдущий  Следующий

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

ClassVar := ClassType.ConstructorName;

Расширенный синтаксис new и dispose не может быть использован для создания и уничтожения экземпляра класса. Это конструкции зарезервированы для использования только с объектами. Вызов конструктора спровоцирует вызов GetMem, что-бы выделить достаточно места для хранения данных экземпляра класса. После этого, код конструктора выполняется. Конструктор имеет указатель на его данныe, в Self.

Замечание:

{$PackRecords} директива также влияет на классы, то есть выравнивание в памяти различных полей зависит от значения директивы {$PackRecords}.

Так же, как для объектов и записей,  может быть объявлен packed class (упакованный класс). Это имеет тот же эффект, что и на объект, или запись, а именно, что элементы выровнены по границам 1 байт, то есть как можно ближе.

Функция SizeOf(класс) возвращает то же, что и SIZEOF(Указатель), так как класс является указателем на объект. Чтобы получить размер данных экземпляра класса, используйте метод TObject.InstanceSize.