Путешествуя по TObject. Или как оно работает
Категория реферата: Рефераты по информатике, программированию
Теги реферата: контрольные 7 класс, бесплатные рефераты без регистрации
Добавил(а) на сайт: Jaz'kov.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 | Следующая страница реферата
O := TObject.Create; // Корректный вызов
End;
При вызове метода конструктора у объекта важно отметить тот факт, что если в конструкторе создаются поля-объекты, то тут возникает потенциальная опасность утечки памяти, так как новые экземпляры создаются, а старые не уничтожаются.
Procedure Free;
Эта процедура инициирует процесс разрушения объекта в памяти. Почему же не деструктор? Вызов деструктора является корректным освобождением ресурсов для устаревшего способа определения объектов object. Если же посмотреть на то, каким образом работает эта процедура, то можно увидеть интереснейшую картину.
procedure TObject.Free;
asm
TEST EAX,EAX
JE @@exit
MOV ECX,[EAX]
MOV DL,1
CALL dword ptr [ECX].vmtDestroy
@@exit:
end;
Что же мы видим? В первой строке происходит сверка указателя на Self (себя) с нулем - а не освободили ли нас уже? Если еще нет, то соответственно указателю на vmtDestroy мы вызываем реальный деструктор. В противном случае происходит выход из процедуры. Таким образом происходит тривиальная «проверка на дурака» со стороны RTM Delphi. При вызове же деструктора мы непосредственно освобождаем (или не освобождаем, а зря) ресурсы объекта. Опять же при освобождении ресурсов выполняется полный набор действий.
BeforeDestruction
FreeInstance
Метод FreeInstance вызывает каскад процедур, направленных на освобождение всех захваченных ресурсов, в том числе и динамических массивов, Variant типов и многого другого. Это должно быть полезно при возникновении исключительных ситуациях в конструкторе при уже созданных внутренних динамических структурах. Это также весьма полезно как механизм сбора мусора внутри объекта.
class function InitInstance(Instance: Pointer): TObject;
Функция инициализации экземпляра информацией из VMT, при этом учитывается использование интерфейсов при наследовании. Важно обратить внимание на то, что это функция класса, фактически эта функция заполняет болванку объекта, созданную функцией NewInstance.
Procedure CleanupInstance;
Процедура возврата экземпляра к «девственному» содержанию. При этом используются информация, хранящаяся в vmtInitTable и в vmtParent.
Function ClassType: TClass;
Возвращает класс объекта. А если быть более точным, то возвращается непосредственно указатель на VMT.
Рекомендуем скачать другие рефераты по теме: сочинение язык, доклад по биологии.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 | Следующая страница реферата