Nie czytacie uważnie - pierwszy kod był kompilowany pod Lazarusem (1.0.8), a ten drugi pod Delphi 7 ;)
Wybacz mi, ale kogo masz na myśli? Z mojego postu chyba jasno wynika że wiem o co chodzi. Tym bardziej nie rozumiem dlaczego piszesz komentarz do mojego postu.
Zależy jak komu wygodnie to interpretować w końcu zmienna jest określonego typu.
Hm...
a:TStrings;
begin
a:=TStringList.Create;
Jakiego typu jest tutaj zmienna?
Dlaczego nie możesz sobie zmienić typu zmiennej dynamicznie?
Bo to Pascal.
A w FPC wygląda na to że możesz bo coś co nie jest TObject nagle jest TObject.
hm, raczej: coś co nie istnieje, nie jest TObject. Typ zmiennej wciąż jest TObject, tylko że to jest wskaźnik na właściwą klasę. Skoro wskaźnik jest 'nil' to ja taki pewien nie jestem czy jest on typu TObject. Typu nie określa zmienna do której to jest przypisane.
Po prostu dziwna sprawa że oba kompilatory różnie to interpretują, natomiast który to robi prawidłowo to sprawa dyskusyjna.
Cóż, zależy czy dla ciebie nil is TObject
:)
Jednoznacznie wole działanie FPC, bo mogę w ten sposób stwierdzić czy obiekt jest zainicjalizowany.
Do tego jest assigned
ale jednak może to być traktowane jako 'awaryjne' działanie.
No tak to jet plus, tyle że is w zasadzie chyba nie zostało stworzone do sprawdzania czy istnieje czy nie tylko czym jest (jakiego jest typu) "The is operator, which performs dynamic type checking, is used to verify the actual runtime class of an object.". Takie coś to powinno się sprawdzać inną metodą jak Assigned tyle że Assigned tylko wtedy działa poprawnie gdy przy zwalnianiu przypiszesz nil.
Dlatego się używa FreeAndNil.