Zwalnianie klasy i przypisanie wartości nil - czegoś nie wiem.

0

Cześć, ponieważ brakuje mi wiedzy dlaczego tak się dzieje chciałbym was o to zapytać.

var
  dane: TParcelManagementClass; //jakaś klasa
  klasa_w_dane: TAdditionalServicesClass; 
begin
  (...Program...)

  //Opcja 1
  klasa_w_dane := dane.AdditionalServices;
  FreeAndNil(klasa_w_dane); 

  //Opcja 2
  klasa_w_dane.AdditionalServices.Free;
  klasa_w_dane.AdditionalServices := nil;
end;

Chciałbym wiedzieć dlaczego FreeAndNil(klasa_w_dane) zwalnia klasę ale nie przypisuje wartości nil? Coś mi mówi że zwalnia bo zmienna wskazuje na klasę ( ten sam adres ) ale nie przypisuje wartości nil ponieważ albo już nie wskazuje na tą klasę albo przypisuje wartość nil tylko zmiennej klasa_w_dane

5
Rafał D napisał(a):

Chciałbym wiedzieć dlaczego FreeAndNil(klasa_w_dane) zwalnia klasę ale nie przypisuje wartości nil?

A ja bym chciał wiedzieć dlaczego robisz to:

klasa_w_dane := dane.AdditionalServices;

a nie to:

klasa_w_dane := TAdditionalServicesClass.Create();

Jeśli chcesz wiedzieć co robi FreeAndNil w Twoim przypadku to postaw breakpoint i sobie sprawdź co jest nilowane (która zmienna). Instancja powinna zostać zwolniona, a nil będzie przypisany do zmiennej klasa_w_dane, bo tak działa FreeAndNil. Jeśli chcesz aby nil został przypisany do klasa_w_dane.AdditionalServices, to zrób tak:

FreeAndNil(klasa_w_dane.AdditionalServices);

Ale jeśli klasa_w_dane.AdditionalServices jest właściwością, to to nie zadziała.

2

W zasadzie do tego co napisał @furious programming można by dodać jeszcze kilka wariantów (z tym że zupełnie wariackich).
Odpowiedź na pytanie zależy od tego co przydzieliłeś, czyli do pytania musisz dodać fragment kodu który odpowiada za przydzielenie tego co chcesz teraz zwolnić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1