Witam
Bawię się z klasą vector. Konkrentie z implementacją dostarczoną z VS 2012 (gdyby to miało znaczenie w tym kontekście).
Dajmy na to że mam klasę Dane i klasę
std::vector<Dane> v;
//i dalej
Dane d1;
v.push_back(d1);//zawola konstruktor kopiujący
v.reserve(3);//raz zawoła konstruktor kopiujący jako iż musi przenieść d1;
v.resize(3);//dopiero to woła konstruktory. Jeden kopiujący (d1) i dwa zwykłe (do dopełnienia wektora)
Więc moje pytanie brzmi: jak to wygląda od środka. A konkreniej: jakie operacje są wykonywane gdy wołamy reserve() i jaka jest wewnętrzna reprezentacja struktury pamięciowej stojąca za vector'em. Zwykła tablica z wartownikiem indeksu raczej nie, bo tablice obiektów wypełniane są obiektami w momencie utworzenia tablicy.
I drugie pytanie. W kontekście struktury pamięciowej stojącej za vector'em. Gdzie jest błąd w moim rozumowaniu:
-operator [] nie sprawdza zakresu (szybki ale na tyle bezpieczny na ile programista uwazny/dobry)
-reserve(n) rezerwuje (przydziela?) pamięć dla n elementów
To dlaczego taki kod się wykrzacza?
Vector<Dane> v;
v.reserve(10);
v[5];//wyjątek
Pozdrawiam