![]() |
Re: Funktionsrückgabewert: Array
Zitat:
|
Re: Funktionsrückgabewert: Array
Dann versteh ich aber nicht, warum Delphi ein dynamisches Array als Parameter kopieren soll.
Gruß |
Re: Funktionsrückgabewert: Array
Dein Objektinstanzenzeiger wird intern kopiert, nur das Objekt kann er nicht kopieren. Beispiel:
Delphi-Quellcode:
procedure Test(AObject: TObject);
begin AObject := nil; end; procedure Anderes; var lInstance: TObject; begin lInstance := TObject.Create; try Test(lInstance); if lInstance = nil then WriteLn('nicht kopiert') else WriteLn('Instanzenzeiger wurde kopiert & Kopie wurde zurück gesetzt'); finally lInstance.Free; end; end; |
Re: Funktionsrückgabewert: Array
Ja klar, wenn ich den Parameter nicht als var übergebe, dann bleibt der Zeiger nach außen natürlich "konstant". Ich kann den Inhalt eines Objektes in der Procedure ändern, weil ich auf die enthaltenen Daten zugreife auf dessen Struktur der Zeiger der Instanz zeigt.
Ich dachte nur, dass Delphi das mit allen Zeigern so macht und ein dynamisches Array ist halt ein Zeiger auf den Speicher. Gruß oki |
Re: Funktionsrückgabewert: Array
Zitat:
|
Re: Funktionsrückgabewert: Array
oh, ich glaub, jetzt reden wir aneinander vorbei. Ich wiederhol noch mal, was ich verstanden habe.
Wird ein dyn. Array in einer Procedure nicht als var-Parameter übergeben, so kopiert Delphi intern alle Daten des Arrays bei der Übergabe, was zu einer erheblichen Anzahl an Operationen führen kann. Und genau das versteh ich nicht. Die Übergabe der Adresse sollte doch reichen, wie bei der Objectinstanz. :gruebel: Mir gehts hier also ausschließlich um das Array, nicht um die Objekte. Gruß |
Re: Funktionsrückgabewert: Array
Zitat:
Roachford Wenn du var weglässt, erstellt dir Delphi vor Änderungen eine Kopie des Arrays und somit setzt du höchstens die Kopie auf 0. Das "vor Änderungen" bezieht sich nicht auf den Array Inhalt sondern auf das Array selbst. Roachford Ich müsste hier vllt. nochmal explizit darauf hinweisen, dass ich die Veränderung des Arrays meine - also von NIL setzen bist SetLength(). Ein Veränderung der Arrayinhalte ohne Grössenänderung ist natürlich ohne var möglich, da er die Daten an der Stelle direkt editiert, welche der Zeiger bestimmt. |
Re: Funktionsrückgabewert: Array
Ja, dann haben wir wirklich aneinander vorbei gesprochen. Ich meinte eigentlich die Inhalte.
Dann sollte das jetzt geklärt sein. :mrgreen: Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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-2025 by Thomas Breitkreuz