Допустим, что у меня есть такой код в моем блоке:Delphi ссылка на объект в конструктор
TClass = class(tobject)
// ... implementation ...
end;
TControl = class(tobject)
private
FCheck: TClass
public
constructor Create(value: TClass);
// ... implementation...
end;
constructor TControl.Create(value: TClass);
begin
FCheck := value;
end;
Как вы можете видеть, класс управления собирается принять TClass
в качестве параметра в конструкторе, так что мне нужно чтобы сделать что-то вроде этого:
//The 'a' is a TClass that has already been created
c := TControl.Create(a);
try
//... do what I need ...
finally
c.Free;
end;
Это очень простой: я собираюсь использовать a
в качестве параметра конструктора, но я не могу понять, если то, что я делаю это безопасно. У меня есть утечка памяти?
В конструкторе я делаю FCheck := value
, и я думаю, что это правильно, потому что я передаю ссылку на объект. Должен ли я реализовать деструктор в TControl, чтобы освободить FCheck
? Я не могу понять, правильно ли я управляю объектом FCheck.
Я собираюсь использовать объект a, но я его не освобожу. Когда я освобождаю c, мне нужно освободить FCheck или нет? a является общедоступным и создается в форме create, c создается в процедуре –
@RaffaeleRossi Обычно объекты должны освобождаться только тем же классом, который его создал. Вам никогда не придется беспокоиться о том, чтобы освободить его где-нибудь еще, если у вас нет возможности передать собственность другому. «Собственность» в этом смысле означает только ответственный класс. –
Aaah ok получил это. Так что я делаю нормально, потому что FCheck все равно умрет, когда я позвоню c.Free. Верный? Собираюсь принять –