Witam,
Mam taki problem. Mam w aplikacji sporo klas które "komunikują" się ze sobą, inaczej - są ze sobą w jakiś sposób powiązane. We własnym konstruktorze przesyłam wskaźnik do obiektu, dzięki czemu obiekt docelowy może wywołać jakąś metodę obiektu pierwszego itd. Jednak czasami ciężko nad wszystkim zapanować, np. gdy jakiś obiekt zostaje zwolniony z pamięci a inny chce sie do niego odwolac to dostaje AV (mimo że zrobilem FreeAndNil(Zmienna), to obiekt podrzędny dalej pamięta wskaźnik i odwołuje się do niego. Zamiast dodawać kolejne moduły do uses żeby odwoływać się do zmiennych trzymających wskaźnik do obiektów, chciałbym sprawdzać czy ów zmienna jest różna od nil ale nie odwołując się bezpośrednio do niej. Troche zakręciłem, ale już późno. Bardzo prosty przykład:
type
TObject1 = class
public
procedure JakasProcedura;
end;
type
TObject2 = class
private
FObject1: TObject1;
procedure InnaProcedura;
public
constructor Create(in_Object1: TObject1);
end;
var
Object1: TObject1;
Object2: TObject2;
constructor TObject2.Create(in_Object1: TObject1);
begin
inherited Create;
FObject1 := in_Object1;
end;
procedure TObject2.InnaProcedura;
begin
//żeby tu mi nie wybuchalo
if Assigned(FObject1) then
FObject1.JakasProcedura;
end;
//przyklad:
Object2 := TObject2.Create(Object1);
I teraz, jeżeli gdzieś zostanie zwolniony FreeAndNil(Object1), to żeby w lini:
procedure TObject2.InnaProcedura;
begin
//żeby tu mi nie wybuchalo
if Assigned(FObject1) then
FObject1.JakasProcedura;
end;
...object2 wiedział że object1 już nie istnieje (obecnie w FObject1 zostaje wskaźnik do obiektu). Nie zawsze wygodnie jest się bezpośrednio odwołać do zmiennej zadeklarowanej w var. Nie mogłem wymyśleć lepszego przykładu, ale chyba wiadomo o co chodzi?