Re: Der String
28. Dez 2003, 17:30
string ist Original-Pascal, deshalb nicht TString.
Damals war es ein ShortString also das erste Byte eine Laengenangabe.
Der moderne Delphi-String ist eigentlich eher eine Klasse.
Er wird immer dynamisch alloziiert (automatisch durch den Compiler).
Der Zeiger auf den String zeigt nicht auf den Anfang des alloziierten Bereichs sondern zwei Integer weiter.
dort steht ein C-String, also die Zeichen mit einem abschliessenden #0-Zeichen.
Die beiden verborgenen Integer enthalten die Laenge des strings (das was Length zurueckliefert) und
einen Referenzzaehler.
Bei einer Zuweisung
S2 := S1;
wird nur der referenzzaehler erhoeht. Erst wenn S2 veraendert wird, wird eine eigene Kopie angelegt.
Deshalb ist auch ein Zugriff wie S2[3] eher ein Zugriff auf eine property, denn es wird intern eine Funktion aufgerufen.
Das ist auch deshalnb noetig, da der Leerstring durch einen nil-Pointer repraesentiert wird.
|