Egy programban minden változónak és tömbnek előre le kell foglalni a memóriát, majd törölni őket?
Pl: int* a= new int;
*a=5;
delete a;
És ez nem 2 változót hoz létre,egy pointert és egyet amire mutat?Majd törlésnél kitörli azt amire mutat, de a pointerben megmarad a memóriacím akkor az nem ugyanaz mintha csak simán int a=5 ként hozzuk létre?
Illetve egy programban minden változót így kell létrehozni és törölni az optimális működéshez?
Köszönöm a válaszokat előre is.
"Illetve egy programban minden változót így kell létrehozni és törölni az optimális működéshez? "
Mért kéne? Ha csak kell lokálisan egy int változó, akkro csak simán
int a;
A "new" a heap-en foglal memoriat. Ez egy nagyobb terulet, viszont itt fel kell szabaditani a hasznalat vegen a memoriat.
A stack-en ahogy kiersz a fuggvenybol, felszabadulnak az ott definialt valtozok.
Úgy kell, ahogy a működéséhez optimális. Jól gondolod, a fent említett példa létrehoz egy pointert, és a pointer által mutatott címen egy int változót. Ez általában fölösleges, elég egyszerűen int a = 5; szintaktikával létrehozni egy változót. Ez a változó pedig magától felszabadul, ha lejár az élettartama (pl függvényen belüli lokális változó akkor, ha végetér a függvény futása).
Namost, ezek a lokális változók az ún. stack-en lesznek eltárolva, ez egy relatíve kisebb terület, és ha nagyon sok adatot tárolsz rajta (gondolok itt például hatalmas nagy tömbökre, vagy a végtelenségbe hajló rekurzív hívásokra) akkor a méltán híres "Stack overflow" hibával kerülsz szembe. Alapvetően nem kell ezzel foglalkoznod, mert extrém mértékű memóriahasználat kell ehhez.
Ott van viszont a heap is, ahova a new kulcsszóval létrehozott változók kerülnek. Ez mint már mondták, sokkal nagyobb, viszont a heap-en levő változók nem fognak automatikusan törlődni, azoknak a manuális törlésére neked kell odafigyelni.
Egy kis side note: Igazából majdnem mindig használod a heap-et, még ha nem is tudsz róla. A legtöbb container típus (pl vector) struktúrája tartalmaz dinamikus tömböt, ami a heap-en kerül tárolásra. Az objektum jelentős része a stack-en foglal helyet, de a magában foglalt dinamikus tagokat ezek is a heap-en tárolják. Ezzel viszont NEKED nem kell újfent foglalkoznod, mert ezek a containerek úgy vannak megírva, hogy 'elpakoljanak' maguk után.
Ha memóriafoglalásról beszélünk, akkor a stack és heap elsősorban nem mint adatszerkezet, hanem mint különböző memóriaterület értendő.
Úgyhogy az előző válaszoló nettó hülyeséget beszél.
Az eredeti kérdés pedig teljesen értelmetlen.
Program és programnyelv függő.
#8: ne hisztérikázz.
A kérdés úgy szólt, hogy "Egy programban...".
Attól, hogy utána egy példa C++-ban volt, nem jelenti azt, hogy minden program C++ lenne és az lenne a szentírás.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!