C++-ban hogyan állapítom meg egy tömbre mutató pointerrel, hogy a tömb adott eleme NULL-e?
Van egy tömböm:
SajatOsztaly tomb* = new SajatOsztaly[100];
Ebbe rakosgatok bele SajatOsztaly objektumokat, de néha ki is törlök. Ezért nem elég, ha számontartom, hanyadik indexbe tettem utoljára, mert régiek is kiürülhetnek. Ennek a tömbnek egy elemére úgy hivatkozok, hogy *(tomb+i), ezt értem. De honnan tudom, hogy ez a *(tomb+i) egy már megadott objektumra mutat, vagy csak egy lefoglalt memóriaterületre? Nem tudom, hogy NULL-nak hívhatom-e, de a NULL-t így értettem a kérdésben.
Amikor felszabadítod, nullázd ki:
delete tomb[i];
tomb[i] = 0; //vagy tomb[i] = nullptr; ha újabb fordítód van
De ez alapvetően arra utal, hogy valami tervezési problémád is van, ez nem egy jó dizájn. Gondolkozz el, nem-e érdemesebb map/set-et használni, vagy valami egyéb, tömbnél összetettebb adatszerkezetet.
Nagy adatsor esetén semmiképp nem érdemes ezt a megoldást használnod. Egyébként megteheted az, hogy számon tartod, hány eleme van a tömbnek, aztán törléskor a törlendő elemet felcseréled az utolsó elemmel (swap parancs). Ez elég gyors tud lenni, ha az objektumodban csak néhány int vagy pointer van, tehát nem kilobájtnyi adatok. Ha esetleg nagyobbak, akkor mutatókból álló tömböt csinálj, és a mutatókat cserélgesd, de vedd figyelembe hogy ez a sebesség rovására mehet ha tényleg valami villámgyors programot akarsz. (Például valamit, ami matematikai számításokat végez) Aztán az utolsó elemet ki is nullázhatod, de nem fontos, elég, ha a tömb hosszát csökkented eggyel. Ha úgy csinálod meg a program többi részét, hogy figyelembe veszi, hogy a tömb hosszán túl lévő elemeket (Amik persze szintén lefoglalt memóriaterületek, és nem null vagy nullptr értékűek!) ki kell hagyni a számításból.
De ha a teljes tömböd nagy méretű, akkor inkább a vector használatát javaslom.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!