Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion richtig definieren??? (https://www.delphipraxis.net/128297-funktion-richtig-definieren.html)

romber 27. Jan 2009 15:32


Funktion richtig definieren???
 
Hallo!

Habe eine Anfänger-Frage. :-)

Mit IdHTTP bekomme ich den HTML-Code einer Seite in eine String-Variable; Dann werden nacheinander mehrere Funktionen ausgeführt, die alle als Parameter diese Variable mit Code erhalten. Keine der Funktionen ändert die Variable, es wird nur gelesen.

Wie soll ich den Parameter am besten übergeben, um nicht unnötig Speicher zu verbrauchen? Ich meine, wenn ich es einfach so übergebe

Delphi-Quellcode:
function GetData1(ASource: string): string;
function GetData2(ASource: string): string;
...
wird ja bei jedem Funkionsaufruf neue Varible erstellt, den Inhalt des übergebenen Strings dorthin kopiert und unnötig speicher verwedet, oder? Verstehe ich es richtig, dass wenn ich const vor dem Parameter setzte mit der übergebenen Vriable gearbeitet wird, statt eine neue zu erstellen?

Delphi-Quellcode:
function GetData1(const ASource: string): string;
function GetData2(const ASource: string): string;
...

DeddyH 27. Jan 2009 15:39

Re: Funktion richtig definieren???
 
Richtig, durch das const wird keine lokale Kopie erzeugt, sondern das Original übernommen.

romber 27. Jan 2009 15:44

Re: Funktion richtig definieren???
 
Danke! Das wollte ich wissen.

himitsu 27. Jan 2009 15:46

Re: Funktion richtig definieren???
 
außer bei Integer und kleineren Typen ... da isses meißt egal, da dort nicht die Referenz übergeben wird, sondern der Inhalt. (außer bei VAR und OUT)

Apollonius 27. Jan 2009 16:29

Re: Funktion richtig definieren???
 
Auch beim String ist das egal, Referenzzählung sei Dank. Bei Strings und Interfaces bewirkt const lediglich, dass der Referenzzähler nicht am Anfang erhöht und am Ende dekrementiert wird.

himitsu 27. Jan 2009 16:48

Re: Funktion richtig definieren???
 
@Apollonius: aber z.B. WideString hat keine Referenzzählung :stupid:

Apollonius 27. Jan 2009 16:50

Re: Funktion richtig definieren???
 
Stimmt. Aber String steht in keiner Delphi-Version für WideString.

himitsu 27. Jan 2009 16:56

Re: Funktion richtig definieren???
 
Zitat:

Stimmt. Aber String steht in keiner Delphi-Version für WideString.
Du weißt nicht, wie ich mein D7 schon verbogen hab :roll:

Aber das war eigentlich mehr allgemein zu Parametern gedacht :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 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