Ciekawi mnie pewna zagwozdka. Załóżmy taką sytuację:
Jest sobie std::vector, przechowuje on elementy klasy Sth (std::vector<Sth> vec). Następnie ustawiam sobie wskaźnik na wybrany element std::vectora (Sth * ptr = vec[3];). Wybrany element ma jakiś adres w pamięci (0x111111), zatem taka wartość będzie przypisana do zmiennej ptr. Używam sobie tego wskaźnika a w std::vectorze przybywa to coraz nowszych elementów, aż nagle, brakuje miejsca i std::vector realokuje swoje zasoby. W tym momencie ja dalej używam ptr, który wskazuje na obszar zwolnionej do ponownego zagospodarowania pamięci. I nagle robi się problem?
Mam dużą liczbę ciężkich obiektów upchniętych na wektorze, dlatego między klasami przesyłam jedynie wskaźnik na dany element. W pewnym momencie, część klas korzysta z tego wskaźnika, próbując odczytać dane. Opisana wyżej sytuacja będzie powodować błędy? Bo przecież magicznie nie zmienią się wartości pointerów?
Aktualnie, zakładając, że taki problem może wystąpić nadaję każdemu elementowi wektora unikalną nazwę i przesyłam między klasami wyłącznie nazwę, następnie gdy chcę użyć tego obiektu to wyszukuję go sobie po nazwie. Oczywiście wydaje mi się to brzydkie i mało eleganckie. Czy rzeczywiście istnieje ryzyko wyżej opisanego przypadku? Czy dotyczy to wszystkich kontenerów z stl? (przypuszczam, że wszystko co jest oparte o listę tego problemu nie posiada, z racji braku potrzeby realokacji zasobów listy?).