Zitat von
xaromz:
Hallo,
die Annahme ist nicht albern. Es geht hier um die Konsistenz. Mit FreeAndNil setze ich explizit eine Variable. Free tut das nicht. Wäre dem so, hätten wir ein ziemlich komisches Konstrukt: Eine Methode wirkt sich auf die Variable aus, über die sie aufgerufen wurde, aber auf keine andere. In einer solchen Sprache möchte ich nicht programmieren.
Gruß
xaromz
Programmierst du aber
Delphi-Quellcode:
var s:string;
begin
//jetzt ist s nil
s:='Hallo Welt';
//und jetzt zeigt s ganz woanders hin
//ähnliches für dynamische Arrays
end;
@Hawkeye
Na du übergibst bei free "einfach" noch den zweiten Parameter mit, der auf nil gesetzt werden soll. Bei create wird ja auch noch vom Compiler die TypeInfo mitgeliefert. Es gibt noch weitere Funktionen (freemem/dispose), wo der Compiler einfach noch 1 Parameter mit anhängt. Und wenn du mit mehreren Referenzen auf ein Objekt arbeitest, dann nimm doch lieber ein Interface.
Generell besteht bei sowas natürlich immer die Frage der Sinnfälligkeit. Aber wann brauch man denn nochmal einen Zeiger auf ein Objekt, dass nicht mehr existiert? Und wieviele Probleme diesbezüglich tauchten schon in der
DP auf ("assigned funktoiniert nicht!" --> "Du musst den Zeiger auf nil setzen")?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.