Kivétel kezelése C

C nyelvű programozó nagyon korlátozott lehetőségek kivételkezelés találkozott a programban. Ebben a tekintetben, sok C ++ fejlesztési C. Itt programozó lényegesen nagyobb lehetőséget az azonnali kezelés kivételek. Bizottság Szabványügyi C ++ biztosított egy nagyon egyszerű, de hatékony formája kivételkezelés.

A sötét napok

Egy tipikus függvény C-ben írt valahogy így néz ki:

Nem úgy néz ki, nem? Ön teljes mértékben függ az érték, amely vissza Önnek a funkciók és az egyes hiba, akkor folyamatosan kell a kódot, hogy kezeli azt. Ha, mondjuk, dolgozó legalább 10 mutató funkciók (rapredelyaete memória elengedi, stb), akkor biztosan a fele funkció kód elfoglalja a hiba-kezelő kód. Ugyanez a helyzet az, hogy a kód kéri ezt a funkciót, mivel ott is kell feldolgozni az összes hibakódot vissza.

Try-fogás-dobás

Elemezzük az alapokat a kivételkezelés C ++. Ahhoz, hogy kényelmesen használható kivételek C ++, meg kell tudni, hogy csak a három kulcsszó:

  • próbálja (TRY) - kezdődik blokk kivétellel;
  • catch (fogás) - a mondat elején, „fogása” kivételt;
  • dobja (cast) - kulcs szó "létrehozni" ( "izgalmas") kivételével.

Íme egy példa, ami megmutatja, hogyan kell alkalmazni, amit tanultál:

Ha ezt a kódrészletet, megkapjuk a következő eredménnyel:

Most a húr megjegyzésbe egy dobás; és a funkciót ad a következő eredménnyel:

Mint látható, ez nagyon egyszerű, de ha alkalmazzák az intelligencia, ez a megközelítés úgy tűnik, nagyon erős hibakezelés eszközökkel. Catch lehet „elkapni” bármilyen típusú adatot, valamint a dobást „dobja” bármilyen típusú adatot. Ie dobja AnyClass (); megfelelően fog működni, valamint a fogási (AnyClass d) <>;.

Mint már említettük, a fogási lehet „elkapni” bármilyen típusú adatot, de nem feltétlenül ezen a ponton változó. Ie tökéletesen fog működni valami, mint ez:

Azt is „elkapni”, és minden kivétel:

Az ellipszis ebben az esetben azt mutatja, hogy kifogja az összes kivételt. Ezzel a megközelítéssel, akkor nem adja meg a változó nevét. Ha „dobja” nem szabványos adat (példányait osztályok, struktúrák, stb), akkor jobb, ha „fogás” a link, különben az összes „dobja” változó lesz másolva a verem helyett csak át a mutatót azt. Ha dobja néhány adattípusok, és azt szeretné, hogy elkapjon egy adott változó (vagy inkább egy adott típusú változó), akkor több fogás blokkok, fogása „az” adat típusa:

Create „kivétel

Amikor egy kivétel van emelve, a program beolvassa a verem funkciók, amíg nem talál egy megfelelő fogást. Ha a fogás nyilatkozat nem található, STL fogja kezelni a kivételt egy szabványos processzor, ami mindent kevésbé kecsesen, mint amit tehetünk, némi furcsa (végfelhasználói) üzenetek, és általában összeomlik a program.

Azonban egy sokkal fontosabb azonban, hogy amíg a látható verem funkciók, a romboló valamennyi helyi osztályok, úgy, hogy nem kell zaboditsya megjelenése memória, stb

A túlterhelés globális szereplő új / törlése

És most szeretném küldeni a cikk „Hogyan érzékeli memóriavesztés.” Leírja, hogyan kell felismerni a helytelen elosztását memória kezelése a programban. Lehet kérni, hogy mi az üzemeltető túlterhelés? Ha túl a szokásos új és törölni, akkor van nagy potenciállal követési hiba (hibák és gyakran kritikus) alkalmazásával kivételek. Például:

Ez első pillantásra úgy tűnik, hogy hosszabb, mint a standard check in C „és egyenlő NULL?” De ha egy tucat dinamikus változók juttatott a programban, ez a módszer indokolt.

Throw nyilatkozat paraméterek nélkül

Így láttuk, hogy az új hiba kezelési módszer kényelmes és egyszerű. try-catch blokk tartalmazhat beágyazott try-catch blokk, és ha azt állapítja meg a megfelelő fogás záradékot a jelenlegi beruházások támogatása magasság, kivéve lesz fogott egy magasabb szinten. Az egyetlen dolog, amit meg kell emlékezni - ez az, amit a szereplők következő dobás nyilatkozatot, nem végezték ki.

Ezt a módszert lehet alkalmazni abban az esetben, ha ez nem szükséges, hogy át minden adatot a catch blokkban.

kérelem

Itt egy példa, az összes fenti lehet használni egy adott alkalmazás. Prepolozhit, van egy osztály a programban CMain és egy példányt ebbe az osztályba Main: class cMain ; cMain Main;

És a main () függvény vagy WinMain () akkor használja ezt az osztályt, valahogy így:

A fő program hurok a következőképpen nézhet ki:

következtetés

kivételkezelés megadott módszerrel a cikk, egy kényelmes és hatékony eszköz, de csak akkor dönt, hogy használja-e vagy sem. Egy letölthető biztosan - a módszer megkönnyíti az életét. Ha azt szeretnénk, hogy megtanulják, hogy egy kicsit többet kivételeket lásd a kiadvány a Deep C ++ szerver MSDN.

Kapcsolódó cikkek