Kezdőoldal » Számítástechnika » Programozás » C++ konstruktor es exception...

C++ konstruktor es exception kerdes?

Figyelt kérdés

Kerdesem ehhez a peldahoz kapcsolodik, van egy osztalyom:


class Bolt

{

Bolt()

{

Elado elado;

Vevo vevo;

...

...

Aru aru;

}

~Bolt()

{

}

}


main()

{

try { Bolt bolt; } catch(exception &e) {};

}



Tegyuk fel az "Aru" osztaly dob egy exceptiont, ekkor az elotte levo osztalyok - Elado, Vevo - destruktorai nem hivodnak meg.


Mi a modja hogy felszabaditsuk az Elado, Vevo, stb. osztalyok altal lefoglalt memoriat?


2015. nov. 7. 23:57
 1/8 anonim ***** válasza:

Ez nem így van. Az Bolt konstruktorában az összes változó felszabadul az aru változó előtt. A main-ben a bolt destruktora nem fog meghívódni, hiszen megszakítottad a létrehozását amikor a konstruktor kivételt dobott.


Lehetséges, hogy terminálódik a program futása mert nem várt típusú kivételt dobtál (amit nem kapsz el), és akkor tényleg az történik amit mondasz.

2015. nov. 8. 00:32
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

A vázolt esetben az 1# által írt történik, de vegyük úgy hogy nem local scope, hanem az "elado" és a "vevo" tagváltozók (gondolom így akartad).


Akkor viszont neked kell felszabadítani, szóval ami exceptiont dobhat az "aru" létrehozásánál, azt neked kellene elkapni még a konstruktorban. (tehát azt elkerülni, hogy félig hozz létre egy objektumot, mert ilyen amúgy tényleg van)

2015. nov. 8. 00:37
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:
10%
Nem tudom miért ír olyan aki nincs tisztában a dolgokkal. Minden felfog szabadulni, nem használj raw pointereket és nem lesz problémád. Ha pedig használsz tudd mi, hogy működik ne úgy mint az előző két válaszoló mert bughalmaz lesz a program.
2015. nov. 8. 02:20
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:

[link]


#2 próbáld ki, és nézd meg a memóriahasználatot.

Utána fejtsd ki, mire gondoltál.

2015. nov. 8. 04:37
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

# 4/4 Időpont ma 04:37


A kérdező kódjában hol látsz new akármit? Nem mindegy, hogy a stacken, vagy a heapen hozod létre...

2015. nov. 8. 11:32
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
Akkor olvasd már el a 2-es választ is, és fogd fel, ami benne van.
2015. nov. 8. 14:19
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

Több lehetőség van a memória fel nem szabadítására:


1. Kivételt dob a destruktor, ami terminálja a program futását.

2. Noexcept függvényből dobsz kivételt (terminál).

3. Más típusú kivételt dobsz, mint amit megadtál az függvény exception specification-ben (throw kulcsszó után). Ez az unexcpected handler-t hívja, amit írt más is feljebb.

4. Re-throw-t (throw;) hívsz catch blokkon kívül.

2015. nov. 8. 15:32
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:
Aki alap programokban raw pointert használ annak ideje elkezdenie újra tanulni a nyelvet.
2015. nov. 9. 00:37
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!