W strukturze
element, polem nie jest inna struktura tylko wskaźnik na nią. Zwłaszcza że nie jest to definicja z explicte tworzeniem obiektu tylko sama deklaracja. Mówi to tylko tyle żeby w pamięci zarezerwować miejsce na wskaźnik danego typu. W funkcji
dodaj:
- w linii 1 nie wiem za bardzo co tłumaczyć. Funkcja przyjmuje wartość
int i wskaźnik na strukturę typu
element oraz zwraca wskaźnik na strukturę typu
element
- w linii 3 masz deklarację wskaźnika na strukturę typu
element
- w linii 4 zostaje utworzony obiekt struktury i zostaje zwrócony przez operator
new wskaźnik do zaalokowanej pamięci, który zostaje przypisany do wskaźnika
wsk
- w linii 5 powiem szczerze że nie pamiętam czy to było od początku C++ czy od któregoś standardu, ale
new w przypadku błędu standardowo nic nie zwraca tylko rzuca wyjątkiem typu
bad_alloc więc u Ciebie ten
if się nie wywoła nawet jak będzie błąd alokacji pamięci. Żeby się wywołał musisz zrobić tak żeby
new w przypadku błędu zwracał
NULL zamiast rzucać wyjątkiem (którego nawiasem mówiąc też już się nie powinno używać, a zamiast niego stosować
nullptr) , a do tego służy
nothrow :
Teraz w przypadku błędu alokacji pamięci
new zwraca
NULL, który jest równoznaczny z
0, więc warunek logiczny to odwróci i wejdziesz w
if-a.
Pomijam już fakt że ten stos mimo wszystko jakoś dziwnie wygląda.
-- 5 sie 2017, o 14:42 --
Widzę że ktoś już odpisał, w trakcie jak musiałem wyskoczyć na chwilę przy pisaniu posta, ale szkoda było mi już marnować tego co napisałem.