Wow… Nawet nie zauważyłem, że wyszły nowe części kursu… anyway…
Zmienna nowa jest kasowana po wyjściu z pętli, ale te stworzone elementy zostają? |
1.Na tym polega dynamiczna alokacja,
każdy ma dostęp do pamięci kto ma wskaźnik.
Zmienna wskaźnikowa i jej wartość zostaje zniszczona,
jednakże pamięć dynamiczna wymaga użycia
delete.
[...], normalnie możemy na niej operować jak na tablicy? |
2.Przypisujesz do zmiennej ten sam typ,
więc możesz go wykorzystać tak samo.
Pamiętaj, że
new int i
new int[],
zwracają to samo, tylko do każdego inne delete.
Dla wskaźnika możesz od razu go wyłuskać:
*tabbądź użyć na nim offsetu:
tab[offset]Widziałem też taką śmieszność:
*(tab+offset)Czy w takim przypadku będzie wyciek pamięci? |
3.Kasowany jest sam wskaźnik,
a nie pamięć na którą wskazuje.
Pamięć dynamiczna musi mieć właściciela,
który zadba o kasację pamięci, po jej użyciu.
Wyciek pamięci następuje,
gdy pamięć traci właściciela,
a nie zostaje przed tym zwolniona.
W przypadku, gdy właścicieli jest wielu,
bądź referujących więcej niż jeden,
należy się ustrzec przedwczesnego zwolnienia,
jak i także samego wycieku pamięci...
Wskaźniki inteligentne z następnych lekcji pomogą w tej sprawie.
Czy po zakończeniu programu, samo się wszystko zwolni? |
> samo się wszystko zwolni
> dla samego nawyku wypada użyć operatora delete
Dla jasności czytających Twój kod w przyszłości,
wliczając w to Ciebie, wypadało by... ;)