jak tu nie pogubic obiektow???

0

czesc,

Mam wszystkie obiekty na jednej liscie glownej. Obiekty sa podzielone na rozlaczne grupy.
Te grupy posiadaja listy z wskaznikami do obiektow z glownej listy.

Czasem zwalniam jakis obiekt z tej glownej listy i trzeba wtedy usunąc też wszystkie wskazniki do niego z odpowiedniej grupy.

  • jedna metoda to przy kasowaniu sprawdzic wszystkie miejsca gdzie taki wskanik moze byc i go usunac
  • a druga to przy korzystaniu ze wskaznika sprawdzac czy obiekt pod nim nie zostal usuniety....

nie chce wpisywac do kodu na sztywno miejsc w ktorych moze byc wskaznik - bo to malo rozwojowe i kiedys moze sie rozjechac...
a sprawdzanie za kazdym razem kazdego obiektu to z koleii czasochłonne strasznie...

moze jakies drzewo zamiast list, moze lista list?

chodzi mi o to zeby

  • byl latwy scentralizowany dostep do wszystkich obiektow,
 for ob in WszystkieObiekty do
  ob.jakas_funkcja();

ale tez, bez jakichs dodatkowych warunkow, do obiektow w danej grupie

 for ob in Grupa.Obiekty do
  ob.jakas_funkcja();

a najlepiej jesli moznaby zrobic jeden 'worek' z obiektami roznych klas
i do tego jakis sprytny iterator wyciagajacy np obiekty danej klasy dla danej grupy...

od niedawan uzywam Delphi XE2, moze wprowadzili jakies ciekawe usprawnienia?

no i najwazniejsze, zeby to byl jeden byt, aby nie trzymac wskaznikow do obiektow w wielu miejscach
i nie musiec sie zastanawiac gdzie ich szukac w przypadku zwolnienia obiektu...

pozdrawiam
mh

0

o iteratorach w delphi (pisanych samodzielnie) znalazłem takie coś, wygląda sensownie:
http://sourcemaking.com/design_patterns/iterator

0

Zrób tablicę (wektor) ze wskaźnikami do obiektów, a w listach trzymaj adresy tej tablicy. Nil-ujesz konkretną komórkę tablicy i pozamiatane. No chyba że miąchasz tymi obiektami tak często, że tablica Ci się rozrasta za szybko.

0

Ależ oczywiście, że wie. Niszcząc obiekt przypisujesz nil wskaźnikowi w wektorze. Każdy wskaźnik pokazujący na tę komórkę tablicy będzie pokazywał nil-a. Z dowolnej listy i z dowolnej ilości list. Chyba nie przeanalizowałeś idei :)

0

Da się zrobić, ale dla mnie metoda jest wydumana straszliwie:

  • Tworzysz listę obiektów, której elementy zawierają listę wskazań na dany obiekt (która lista, który element tej listy)
  • Tworząc obiekt i dopisując go do dowolnej listy - uzupełniasz listę obiektów i listę wskazań
  • Niszcząc obiekt - iterujesz po wszystkich listach wskazujących na niego i usuwasz ich odpowiednie elementy.
    Zauważ, że na jeden obiekt może nie wskazywać żadna lista, a na inny - fafnaście, więc masz to o co chodzi.
    Dwie funkcje, ze dwa dodatkowe obiekty i trochę dłubania...

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