Re: Unterschied Pointer/Referenzvariablen
Zitat:
|
Re: Unterschied Pointer/Referenzvariablen
Versuch deinem Objekt nil zuzuweissen in deine Prozedur.
Delphi-Quellcode:
procedure myProc( obj:TObject );
begin obj := nil; end; // var o:TObject; begin o := TObject.Create(); myProc( o ); if o<>nil then Application.MessageBox('sniper hatte recht','sniper'); o.free; end; |
Re: Unterschied Pointer/Referenzvariablen
Hallo Günter,
keiner hier hat behauptet, dass es keinen Unterschied macht, ob Du Parameter mit var oder ohne übergibst. Der Unterschied zwischen Objekten und primitiven Typen ist der, dass ein Objekt eigentlich ein Pointer ist und damit var unnötig ist, um die Member eines Objektes zu verändern. Es wird ja nicht das Objekt kopiert und lokal verwendet, sondern tatsächlich das übergebene Objekt verwendet. Damit kann ich das Objekt manipulieren; wenn Du aber die Objektreferenz selbst ändern möchtest, dann musst Du natürlich var verwenden. |
Re: Unterschied Pointer/Referenzvariablen
genau:
Delphi-Quellcode:
procedure Test1(AObj: TObject);
begin AObj := TObject.Create; end; procedure Test2(var AObj: TObject); begin AObj := TObject.Create; end; var O1, O2: TObject; begin O1 := TObject.Create; O2 := O1; Test1(O1); // hier ist O1 = 02: if O1 = O2 then ShowMessage('Hah ;D '); O1 := TObject.Create; O2 := O1; Test2(O1); //hier ist O1 <> O2 if O1 <> O2 then ShowMessage('Hah ;D '); end; |
Re: Unterschied Pointer/Referenzvariablen
Liste der Anhänge anzeigen (Anzahl: 1)
Ja ok, ich gebs ja zu ... befand mich ein wenig am Irrweg. Konnte man aber deutlich an meinem Beispiel sehen und für diese Fälle ists ja wirklich wurscht.
Hab diese zwei Varianten auch noch dazugepackt in mein TestProjekt, kann man sich anhand des Quellcodes gut anschaun. Vielleicht hilf diese Diskussion ja auch noch jemand anderen, diese "Falle" zu vermeiden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz