Forum: Algorithmen, Datenstrukturen und Klassendesign
by mjustin,
22. Dez 2022
Stimmt, nur dies sollte gehen, d.h. wenn nicht ein Interface sondern eine Instanz übergeben wird:
procedure TMyClass.CopyFrom(AOther: TMyClass);
begin
Self.fA := AOther.fA;
Self.fB := AOther.fB;
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by mjustin,
22. Dez 2022
Die Referenzzählung funktioniert auch bei diesem Konstrukt wie erwartet (automatische Freigabe, keine memory leaks).
Ein bekannter und berüchtigter Referenzzählungs-Bug entsteht, wenn man an einen Parameter, der einen Interfacetyp hat, eine frisch erzeugte Instanz übergibt:
procedure Machwas(MyInt: IMyInt);
...
...
...
MachWas(TMyClass.Create); // bad things will happen
Forum: Algorithmen, Datenstrukturen und Klassendesign
by mjustin,
22. Dez 2022
Das hier sollte funktionieren:
function TMyClass.Clone: IMyInt;
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
MyClass.fA := Self.fA;
MyClass.fB := Self.fB;
Result := MyClass