przez new nie tworzysz wskaznikow, ale obiekty.
a wskaznik jedynie zapamietuje ich adresy.
tworzac wielokrotnie nowy obiekt i przypisujac za kazdym razem adres do tego samego wskaznika - gubisz pamiec, poniewaz wskaznik bedzie pamietal tylko ostatni obiekt.
dlatego nalezy stosowac kontenery
Node * node;
vector < Node *> v;
for( int i = 0; i < 10; i++ )
{
node = new Node;
v.push_back( node );
}
w ten sposob "gromadzisz" wskazniki - a kazdy wskaznik posiada adres nowoutworzonego obiektu. aby dostac sie do obiektu nr 3, uzyjesz
v[2]
ps>> oczywiscie kazdy wskaznik umieszczony w kontenerze trzeba usunac, a dla pewnosci pozniej wektor wyczyscic, aby nie wskazywal "pustych" miejsc
ps2>> tworzac obiekt, nie musisz martwic sie o jego sprzatanie
ps3>> nie jestem pewien, czy dobrze rozumiesz sens uzywania
new
dynamiczne zarzadzanie pamiecia, jak sama nazwa wskazuje, sluzy do zarzadzania pamiecia "na biezaco".
jesli z gory znasz ilosc potrzebnych obiektow, tworzysz sobie te obiekty, nie martwiac sie o ich sprzatanie.
jesli jednak ta liczba jest zalezna od czegos, nie jest stala - wtedy tworzysz wskaznik na obiekt swojej klasy, ktory zajmuje tylko tyle pamieci, ile zajmuje adres (np 32bity=4bajty, podczas gdy obiekt moze zajmowac i 10 x tyle, zalezy od jego budowy).
majac wskaznik na obiekt, nie mozesz jeszcze go uzywac, poniewaz nie wskazuje on na zaden z obiektow. teraz przychodzi kolej na operator [new], zwraca on adres nowego obiektu - co to znaczy? znaczy sie, ze zostaje GDZIES w pamieci przydzielony adres, a "przechwycenie" tego adresu umozliwia przypisanie go do wskaznika wlasnie w momencie tworzenia.
Klasa * wsk;
for( int i = 0; i < 3; i++ )
wsk = new Klasa;
widzisz, co tu jest nie tak?
wskaznik zapamietuje adres obiektu. w jaki sposob dostaniesz sie do adresu pierwszego i drugiego obiektu?
a co gorsza, jak zwolnic pamiec?