Mam klasę Świat oraz Opakowanie.
W klasie Świat mam kontener ( std::list oparty na memory pool) i w nim trzymam wszystkie np. żelki, z wszystkich opakowań. (Poza tym klasa Świat trzyma też same opakowania w zwykłym std::vector)
pojedyncze opakowanie dostaje dwa iteratory begin, end na kontener w klasie Świat, który wskazuje na początek i koniec swoich żelków.
Chce mieć żelki wszystkie razem bo robie kazdej żelce update w każdej pętli głównej programu. A opakowanie raz na dłuższy czas. Teraz opakowanie czasami chce
dodać lub ukraść jedną żelkę z siebie samego. (Tak wiem, genialny, praktyczny przykład) i klasa Świat nie za bardzo wie kiedy to nastąpi. I teraz pytanie czy to OK dać Opakowaniu wskaźnik na świat lub sam kontener żeby mogło sobie go zmieniać?
No dobra, ale po co? Tzn czemu nie możesz iterować po wszystkich żelkach poprzez iterowanie po opakowaniach?
Nie wiem. Starałem się trzymać tego ze jedna klasa to jedno zadanie. świat utrzymuje basen, allokuje, tworzy nowe zelki etc a opakowanie decyduje kiedy jakie żelki usunąć, co dodać i świat się tym zajmuje. Nie mam doświadczenia.
A czy ja mówie że masz to upychać w jednej klasie? o_O Czym innym jest zasada jednej odpowiedzialności a czym innym duplikowanie danych ;]
Dobra, to jak to zrobić porządnie? Świat trzyma opakowania, opakowanie trzyma swoje żelki i znowu pojawia się problem jeśli opakowanie chce dodać nowe żelki bo muszę mieć wskaźnik na basen żeby zapytać o miejsce w pamięci jako że żelki są alokowane dynamicznie.
Wydziel to alokowanie pamięci do osobnej klasy a nie trzymaj tego w klasie Świat.