Hirdetés
- Samsung Galaxy S25 - végre van kicsi!
- Samsung Galaxy Watch6 Classic - tekerd!
- Okosóra és okoskiegészítő topik
- Hivatalos a OnePlus 13 startdátuma
- Samsung Galaxy S21 FE 5G - utóirat
- Samsung Galaxy S20 és S20+ duplateszt
- Bemutatkozott a Poco X7 és X7 Pro
- Google Pixel 9 Pro XL - hét szűk esztendő
- Milyen okostelefont vegyek?
- Vivo X300 Pro – messzebbre lát, mint ameddig bírja
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
Sk8erPeter
#1490
üzenetére
Pedig ha azok a fogalmak megvannak, az első kérdésre is könnyebb válaszolni. Persze mindkettő C++ minta (sőt, a második csak és kizárólag Symbian C++-ban van), ezért C-nél még nem kavar be.
Auto pointer: egy olyan objektum, ami ha megsemmisül a stacken, magával ránt egy hozzárendelt heapen lévő objektumot is, így amikor az auto_ptr scope-on kívülre kerül, a másik objektum biztosan megsemmisül. Ez egy egyszerűsítés, így biztosan nem maradhat meg a heapen lévő objektum pl. azért, mert valahova berakott az ember még egy returnt, és elfelejtette felszabadítani ott is a memóriát

Valahogy így néz ki:
int valami()
{
int *valami_int = new int; // heapen hoztam letre, mint a malloc C-ben
auto_ptr<int> valami_ptr(valami_int); // az auto pointerre bizom a felszabaditast
...
// ugy hasznalom, mint egy pointert
*valami_ptr = 5; // a valtozo erteket valtoztatom itt
...
return 0; // valami_ptr megsemmisul -> valami_int is torlodik
...
return 1; // valahol mashol ugyanez lezajlik
}Ha nem lenne ez az auto_ptr, akkor mindkét return elé oda kéne írni explicite a következő sort (ez a free C++-os megfelelője), amit könnyen kifelejthet az ember, ha utólag hackelget bele a függvénybe, memory leaket okozva.
delete valami_int;
Cleanup Stack: Amikor a Symbiant írták, még nagyon fejletlenek voltak a C++ fordítók, kivételdobáskor a stacken lévő objektumokra nem hívódott meg a destruktor, ami mindenféle vicces hibához vezethetett, többek között "csak" memory leakhez. Ezért a nagyokosok kitalálták, hogy "csináljunk saját kivételkezelést!", megalkották a Leave-eket és a Cleanup Stacket.
Minden heapen lefoglalt objektumot, ami nem tagváltozó, fel kell kézzel rakni a CleanupStackre, és persze le is kell venni onnan, ha olyan műveletek jönnek, amik kivételt (konkrétan leave-et) dobhatnak. Tehát mindig figyelni kell a programozónak arra, hogy mikor mi van rajta, mikor melyik objektum kinek a felelősségébe tartozik, és ennek megfelelően variálni.
Na itt jön be, hogy ha több return utasítás van, akkor kitörhet a káosz, a függvény különböző részein más lehet a CleanupStack állapota, minden returnnél megfelelően adminisztrálni kell, és ha bármit változtatni kell, mindenhol át kell írni...
Példakód:
TInt CSomething::DoSomethingL()
{
TInt result = 0;
CSomethingBig *big = CSomethingBig::NewL();
CleanupStack::PushL(big);
RSomethingResource res;
CleanupClosePushL(res);
result = res->DoSomethingDangerousL(big); // ha ez dob egy leave-et, res bezarodik, big megsemmisul
CleanupStack::PopAndDestroy(2, big); // mindket elemet megsemmisiti
return result;
}Ezt a kódot nem magyaráznám túl, ha nem baj, hiszen csak random firkáltam. A lényeg az, hogy a PopAndDestroy hívást minden return előtt meg kell hívni, pontosan.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Soundbar, soundplate, hangprojektor
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Gyúrósok ide!
- AMD GPU-k jövője - amit tudni vélünk
- Autós topik
- Milyen TV-t vegyek?
- Samsung Galaxy S25 - végre van kicsi!
- Milyen okostelefont vegyek? OFF topik
- Samsung Galaxy Watch6 Classic - tekerd!
- Robotporszívók
- További aktív témák...
- Hibátlan HP 250 G4 notebook (laptop) eladó
- BESZÁMÍTÁS! Sony PlayStation 5 Slim 1TB SSD lemezes konzol garanciával hibátlan működéssel
- Kihasználatlan PC - Ryzen 5 2600X GTX1660 Ti TUF B450 PRO Gaming 16 GB RAM stbstb
- BESZÁMÍTÁS! Sony Playstation 4 Slim 500GB játékkonzol garanciával hibátlan működéssel
- BESZÁMÍTÁS! Nintendo Switch OLED 64GB +256GB fekete játékkonzol garanciával hibátlan működéssel
- Bomba ár! Lenovo ThinkPad T440s - i5-4GEN I 8GB I 128GB SSD I 14" HD+ I Cam I W10 I Garancia!
- Gamer PC /Ryzen 7 9800X3D, 32GB RAM, 1TB SSD/ akciós áron eladó! BeszámítOK!
- BESZÁMÍTÁS! Gigabyte H610M i3 12100F 16GB DDR4 512GB SSD RX 5600XT 6GB Zalman S2 Corsair 650W
- Nagyakkus, mobilnetes - Dell Latitude 5330 i3-1215U 6mag! 16GB 512GB 13.3" FHD 1 év gar
- Xiaomi Redmi Note 9 / 4/128GB / Kártyafüggetlen / 12 Hó Garancia
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest



