Dank des
Owners wird das schon vorher freigegeben.
Delphi-Quellcode:
procedure FAMCard.SetHeader(const Value: FAMPanel);
begin
FHeader.Free;
FHeader := Value;
end;
Und was wenn man die selbe Instanz reingibt?
Delphi-Quellcode:
procedure FAMCard.SetHeader(const Value: FAMPanel);
begin
if FHeader <> Value then
FreeAndNil(FHeader);
FHeader := Value;
end;
// oder besser so
procedure FAMCard.SetHeader(const Value: FAMPanel);
begin
if Assigned(FHeader) and (FHeader.Owner = Self) then
FreeAndNil(FHeader);
FHeader := Value;
end;
Wobei hier dein angesprochenes Problem erst Recht gilt, denn wer gibt dann Value frei, wenn die Komponente freigegeben wird.
Aber grundsätzlich bin ich auch für die Assign-Variante, denn das ist eine interne Komponente und die sollte/darf einfach nicht von außen direkt geändert werden können.
PS: Eigentlich braucht man hier garkeinen Setter, denn zum Laden der Property nimmer der
DFM-Loader den Getter und weist die Werte den Property der existierenden Instanz zu.
Aber der
DFM-Writer ist schon immer totaler Schrott, weil er bei Objekten einen Setter verlangt, denn ohne Diesen werden die Property nicht gespeichert.