Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.432 Beiträge
 
Delphi 12 Athens
 
#69

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 1. Apr 2015, 23:51
Zu
Zitat:
Das stimmt nicht ganz. Mit der Zuweisung wird zunächst nur der Referenzzähler des Strings erhöht. Erst wenn eine Änderung in Result erfolgt wird ein neuer String angelegt und der Inhalt kopiert.
Bei mir ist das anders.

Delphi-Quellcode:
PROCEDURE TMain.Test;
var S,R,Res:String; I:Nativeint;
begin
   S:='Delphi-Praxis';
   R:='aie';
   Res:=RemoveCharsEx('Delphi-Praxis','aie');
end;
In diesem Fall hast du wohl Recht - allerdings nur, weil der Source-String hier eine Stringkonstante ist. Auch wenn man beim Aufruf die Variablen S und R benutzt (ich vermute das war deine Absicht), bekommt man das gleiche Verhalten, da der Rückgabewert einer Funktion immer ein referenz-gezählter String ist (eben keine Konstante).

Das ist allerdings ein Sonderfall, der (vermutlich) in der praktischen Anwendung der Funktion kaum zum Tragen kommt. Du kannst ja mal den folgenden Code durch den Debugger laufen lassen:

Delphi-Quellcode:
  
function RemoveCharsEx(const S, Chars: string): string;
begin
  result := S;
end;

procedure Main;
var
  S, R, Res: String;
begin
  S := 'Delphi-Praxis'; // Referenzzähler = -1
  R := 'aie';
  S := S + S; // Referenzzähler = 1
  Res := RemoveCharsEx(S, R);
end;
Sowohl unter XE2 als auch XE7 wird bei der Zuweisung lediglich der Referenzzähler erhöht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat