![]() |
Klassen Operatoren
Hallo,
ich habe gerade das Tutorial über ![]() Jetzt wollte ich versuchen ob man auch richtige Klassen statt Records mit diesen Operatoren ausstatten kann. In der Delphi Online-Hilfe steht das auch Klassen mit Operatoren überladen werden können: Zitat:
![]() Das ist mein Code:
Delphi-Quellcode:
Leider erhalte ich folgende Fehlermeldung vom Compiler:
...
type TTest = class private FValue: Integer; public class operator Equal(A: TTest; B: TTest): Boolean; // Zeile 14! published property Value: Integer read FValue write FValue; end; ... class operator TTest.Equal(A: TTest; B: TTest): Boolean; begin Result := A.Value = B.Value; end; ... procedure TForm1.Button1Click(Sender: TObject); var test1: Ttest; test2: Ttest; begin test1 := TTest.Create; try test2 := TTest.Create; try test1.Value := Edit1.Text.ToInteger; test2.Value := Edit2.Text.ToInteger; ShowMessage(BoolToStr(test1 = test2, True)); finally test2.Free; end; finally test1.Free; end; end; Zitat:
|
AW: Klassen Operatoren
Funktioniert nur mit Records.
|
AW: Klassen Operatoren
Der Grund ist auch relativ einfach erklärt: Records werden automatisch freigegeben, Klassen nicht. Angenommen du überlädst den + Operator und rechnest
Delphi-Quellcode:
.
d := a + b + c
Delphi-Quellcode:
ergibt ein temporäres Objekt das dann mit c verrechnet wird. Wer gibt das frei? Niemand. Speicherleck.
a + b
|
AW: Klassen Operatoren
Das ist ein Fehler in der Doku - offenbar ein Relikt aus .NET-Zeiten. Der Text müsste mal komplett überarbeitet werden, aber dafür fehlt mir gerade die Zeit. Man könnte es aber so auch stehen lassen und hoffen, daß der Compiler irgendwann mal nachzieht...
|
AW: Klassen Operatoren
Zitat:
|
AW: Klassen Operatoren
Zitat:
|
AW: Klassen Operatoren
Macht auch keinen Sinn dass es (meine ich) auf den ARC-Compilern auch nie funktioniert hat.
|
AW: Klassen Operatoren
Zitat:
|
AW: Klassen Operatoren
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz