Cześć, to mój pierwszy post na tym forum jednak z 4p korzystam od paru lat. Podobnie ile piszę w Delphi.
Dziś jednak zostałem nieco zaskoczony sytuacją, w której proszę o pomoc:
mam w aplikacji klasę dziedziczącą po TObject i fragment kodu:
var
objekt:TMojaKlasa;
begin
if a=2 then objekt := TMojaKlasa.Create();
...
czyli obiekt nie zawsze zostanie zainicjalizowany, w aplikacji jest to ok 50/50. W sekcji finally jednak zawsze do tej pory używałem:
FreeAndNil(objekt)
bez sprawdzania przez Assigned czy został utworzony. Jakież było moje zdziwienie gdy dziś po release aplikacji nagle zaczęła generować wyjątki Access Volation w przypadku kiedy obiekt jest = nil. O ile się nie mylę przecież FreeAndNil powinien przed tym chronić?
Szczerze powiedziawszy sam już nie wiem co gdzie pozmieniałem, tej metody akurat nie ruszałem wcale. Pobrałem z SVN'a poprzednią rewizję, metody się pokrywają w 100%, dane testowe są identyczne i tam przy objekt = nil FreeAndNil nie generuje wyjątku. Oczywiście pewnym rozwiązaniem byłoby zastosowanie wyżej wspomnianego Assigned ale nie wiem czy chcę modyfikować prawie pół tysiąca wystąpień zwolnienia obiektu. Poza tym sam fakt nie daje mi spokoju co mogło się stać.
Będę wdzięczny za pomoc :)