Dobry wieczór. Zwracam się do Was z prośbą o radę.
Napisałem własną implementację grafu. Do tejże dodałem także iteratory po wierzchołkach oraz krawędziach. Iteratory te przechowują wskaźnik surowy do obiektu grafu, na który wskazują. Wszystko działa prawidłowo, ale chciałbym zabezpieczyć kod przed błędami użytkowników. W tym celu potrzebuję w każdej z metod iteratora w jakiś sposób sprawdzać, czy pod wskaźnikiem wciąż istnieje obiekt. W przykładowej sytuacji:
- Dynamicznie tworzę graf
- Tworzę iterator do tego grafu
- Usuwam graf
- Przy pomocy tego iteratora dokonuję próby odczytania zawartości usuniętego grafu
próbuję dostać się do adresu, który przechowuje śmieci lub jest aktualnie wykorzystywany przez inny proces. Gdyby nie przypadek grafu alokowanego na stosie (chyba, że jedynym sposobem utworzenia grafu byłaby metoda zwracająca std::shared_ptr
), pewnie użyłbym std::weak_ptr
(pytanie, jak to wpłynęłoby na szybkość działania - każda operacja wymagałaby "przeróbki" na std::shared_ptr
).
Proszę o poradę, w jaki sposób mogę zapobiec takim sytuacjom.