Witam,
od jakiegoś czasu bardzo męczy mnie jedno zagadnienie, którego sam sobie zupełnie nie umiem wytłumaczyć:
Tworzę listę za pomocą kontenera z STL w której przechowuje obiekty jakiejś złożonej klasy
Za pomocą np: push_front umieszczam w niej kilka elementów.
I tutaj moje pytanie, w jaki sposób przekazywane są te obiekty?
Czy STL je kopiuje i w liście znajdują się kopie?
Wszędzie w STL widzę "const reference", ale zupełnie nie wiem jak to działa.
Bardzo proszę o wytłumaczenie
Co za problem sprawdzić? Na przykład tak:
vector<int*> v;
int *a = new int(1);
int *b = new int(2);
cout << a << " " << *a << " " << &a << "\n";
cout << b << " " << *b << " " << &b << "\n";
v.push_back(a);
v.push_back(b);
for(int i = 0; i < v.size(); ++i)
cout << v.at(i) << " " << *(v.at(i)) << " " << &(v.at(i)) << "\n";
Sprawdzałem w ten sposób, ale wolałbym się dowiedzieć także o teorii, tak abym umiał nazwać rzeczy które dzieją się w moim kodzie. Poza tym zaproponowane przez Ciebie podejście do sprawy jest płytkie. Nie mówi wszystkiego o mechanice działania STL, tylko pokazuje jeden przykład.
Płytka to jest twoja wiedza i umiejętność poszukiwania informacji. proszę
gg, czy masz coś mądrego do powiedzenia czy tylko tak piszesz, bo masz za dużo czasu?
Znam stronę sgi, jednak właśnie dlatego piszę tutaj, ponieważ nie rozumiem tego co mogę tam przeczytać.
Czego ty nie rozumiesz? Jest tworzona kopia, która jest inicjalizowana argumentem, który przekazujesz. Przekazywane jest przez stałą referencję tylko po to, by do celów inicjalizacji nie tworzyć kolejnej kopii lokalnej. Pomyśl na chłopski rozum, że gdyby nie była tworzona kopia to argument nie byłby przekazywany przez stalą referencję bo poza odczytaniem wartości nie mógłbyś operować na elemencie listy. Dowód? proszę - tutaj też zaglądałeś i nic nie zrozumiałeś?
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.