Size: a a a

2020 February 08

VA

Viktor Akselrod in Delphi & Lazarus
ты можешь легко убедиться в правдивости моих слов с помощью отладчика
источник

DB

Dmitry Belkevich in Delphi & Lazarus
ну я больше про то пока, что в TObject.Destroy происходит разрушение инстанса TObject, сейчас inherited гляну
источник

VA

Viktor Akselrod in Delphi & Lazarus
Dmitry Belkevich
ну я больше про то пока, что в TObject.Destroy происходит разрушение инстанса TObject, сейчас inherited гляну
в TObject.Destroy идет не разрушение инстанса, а ручное удаление созданных пользовательских ресурсов
источник

DB

Dmitry Belkevich in Delphi & Lazarus
ок, спорить не буду :) как скажешь. это просто магия компилятора
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Dmitry Belkevich
procedure TObject.FreeInstance;
begin
 CleanupInstance;
 _FreeMem(Pointer(Self));
end;
От сюда Free вызывается
источник

VA

Viktor Akselrod in Delphi & Lazarus
Dmitry Belkevich
ок, спорить не буду :) как скажешь. это просто магия компилятора
так и есть. магия
источник

DB

Dmitry Belkevich in Delphi & Lazarus
да, inherited не обязателен для вызова TObject.Destroy, хотя мне вот анализаторы писали что могут быть утечки
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Dmitry Belkevich
да, inherited не обязателен для вызова TObject.Destroy, хотя мне вот анализаторы писали что могут быть утечки
Они и были бы, но там нечего освобождать
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
И по этому их нет
источник

VA

Viktor Akselrod in Delphi & Lazarus
Геннадий Малинин
От сюда Free вызывается
Free - это метод TObject и он там не вызывается
Free для безопасног вызова деструктора
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Геннадий Малинин
И по этому их нет
есть сам инстанс TObject, и вот он разрушается в деструкторе неявным вызовом магией комплятора
источник

DM

Dmitry Mozulyov in Delphi & Lazarus
destructor - это особый вид функции, для которой компилятор генерирует вызов чистки инстенса
источник

DM

Dmitry Mozulyov in Delphi & Lazarus
constructor - тоже особый вид функций. Там передаётся параметр, нужно ли создавать новый инстенс, или работаем с текущим
источник

DM

Dmitry Mozulyov in Delphi & Lazarus
Плюс в случае неудачного конструктора вызывается деструктор
источник

DB

Dmitry Belkevich in Delphi & Lazarus
в делфи магии с избытком ) от этого и непонятки частично
источник

DM

Dmitry Mozulyov in Delphi & Lazarus
Немного там магии :)
источник

DM

Dmitry Mozulyov in Delphi & Lazarus
Dmitry Belkevich
да, inherited не обязателен для вызова TObject.Destroy, хотя мне вот анализаторы писали что могут быть утечки
Не обязательно. Как и для любой виртуальной функции. Но ответственность на разработчике в таком случае
источник

DB

Dmitry Belkevich in Delphi & Lazarus
ну вот разрушение TObject то вызывается безусловно. но пользовательские данные без inherited не разрушатся. поэтому inherited в деструкторах лучше писать всегда. возможно это анализатор имел в виду, когда ругался на отсутствие inherited кое-где
источник

VA

Viktor Akselrod in Delphi & Lazarus
Dmitry Mozulyov
constructor - тоже особый вид функций. Там передаётся параметр, нужно ли создавать новый инстенс, или работаем с текущим
о каком параметре речь?
источник

DM

Dmitry Mozulyov in Delphi & Lazarus
Viktor Akselrod
о каком параметре речь?
Скрытый аргумент, сразу после Self
источник