Forum: Programmieren allgemein
by Uwe Raabe,
24. Mai 2019
Du irrst gewaltig! In beiden Fällen!
procedure TObject.Free;
begin
// under ARC, this method isn't actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
{$IFNDEF AUTOREFCOUNT}
if Self <> nil then
Destroy;
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mai 2019
Wobei die Initialisierung von In_A streng genommen redundant ist, da strings als managed type automatisch initialisiert wird. Der Lesbarkeit halber würde ich das aber schon so lassen.
Nein, das ist durchaus ein gängiges Muster und erst recht vom Compiler nicht zu beanstanden.
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mai 2019
Knallt aber hier trotzdem.
Genauer: Alles zwischen finally und dem zugehörigen end.
Forum: Programmieren allgemein
by Uwe Raabe,
23. Mai 2019
Eine (non-managed) lokale Variable ist nicht initialisiert. Das gilt auch für Object-Variablen; die kann auf alles mögliche zeigen.
Deswegen sollte slShow vor dem try auf nil gesetzt werden.
Der finally-Abschnitt wird immer ausgeführt - auch bei einem Exit innerhalb eines try-finally.