ПредишенСледващото

С език програмист е много ограничени възможности изключение боравене срещат в програмата. В тази връзка, много от C ++ развитие В. Тук програмист значително по-големи възможности за незабавни изключения за обработка. Комисия по стандартизация на C ++ е предоставил една много проста, но мощна форма на обработка на изключения.

На тъмни дни

Типичен функция написан на C изглежда по следния начин:

Не изглежда, нали? Вие сте изцяло зависими от стойността, която се връща към вас функции и за всяка грешка, постоянно се нуждаят от код, който я управлява. Ако не сте, да речем, да работи с най-малко 10 указатели към функции (rapredelyaete памет се освобождава, и т.н.), а след това със сигурност половината функцията код ще заемат кода за обработка на грешки. Същата ситуация е в кода, който призовава тази функция, тъй като има също така трябва да обработи всички кодовете на грешки върнати.

Опитайте улов хвърляне

Нека да анализираме основите на обработка на изключения в C ++. За да използвате удобно изключения в C ++, което трябва да знаете само три ключови думи:

  • опитайте (опитайте) - започнете блокови изключения;
  • улов (улов) - началото на блока, "догонване" по изключение;
  • хвърли (гласове) - ключова дума "създаде" ( "вълнуващо") е изключение.

Ето един пример, който показва как да се приложи това, което сте научили:

Ако изпълните тази програмка, получаваме следния резултат:

Сега низа коментирате един хвърлей; и функцията ще даде следния резултат:

Както можете да видите, че е много проста, но ако той се прилага с интелигентност, този подход ще изглежда много мощни за обработка на грешки средства. Catch може да "хване" на всякакъв вид данни, както и хвърлянето може да "хвърлят" всякакъв вид данни. Т.е. хвърлят AnyClass (); да работи правилно, както и улова (AnyClass г) <>;.

Както вече споменахме, задържащи "улов" на всякакъв вид данни, но не задължително в този момент променлива. Т.е. перфектно ще работи по следния начин:

Можете също така да "хване" и всички изключения:

В елипса в този случай показва, че ще хване всички изключения. С този подход, не можете да зададете име на променлива. Ако "хвърлят" нестандартни данни (случаи на вас класове, структури и т.н.), е по-добре да се "хване" връзката им, в противен случай всички "хвърлят" променлива ще се копират в стека, а не само да премине указател към това. Ако хвърлите няколко типове данни, и искате да хванете определена променлива (или по-скоро, определен тип променлива), можете да използвате няколко блока за улов, улавяне "вашата" тип данни:

Създаване "е изключение

Когато по изключение е вдигната, програмата сканира функциите на стека, стига да намери съвпадение на улова. Ако не бъде намерен отчета за улов, STL ще се справят с изключение в стандартен процесор, който прави всичко по-малко елегантно, отколкото бихте могли да направите, показващи някои странни (крайните потребители) съобщения и обикновено катастрофа програма.

Въпреки това, по-важен момент е, че докато се виждат функциите на стека, деструктор на всички местни класове, така че не е нужно zaboditsya освобождаването на памет и т.н.

Претоварването глобален оператор нов / изтриване

А сега бих искал да ви изпратя статията "Как да се открие изтичане на памет." Той описва как да се открие неправилно разпределение на управление на паметта в програмата си. Може да попитате какво оператора претоварване? Ако претовари стандартната новия и изтриване, тогава има голям потенциал за проследяване на грешки (грешки и често критични) с помощта на изключения. Например:

Това, на пръв поглед, изглежда е по-дълъг от стандартния проверката в C "и е равна на NULL?", Но ако дузина динамични променливи, разпределени в програмата, този метод е оправдано.

Хвърляне на изявление без параметри

Така че, ние видяхме, как новата обработка на грешки метод е удобен и лесен. блок опитайте улов може да съдържа вложени блок пробвам улов и, ако се установи подходящата клаузата улов на височината подкрепа на текущите инвестиции, изключение ще се хванат на по-високо ниво. Единственото нещо, което трябва да запомните - това е, което операторите, след изявление на тъч, никога не се изпълняват.

Този метод може да се прилага в случаите, когато това не е необходимо да се прехвърлят каквито и да било данни в блока за улов.

приложение

Ето един пример, всички по-горе могат да бъдат използвани в дадено приложение. Prepolozhit, имате клас в програмата CMain и инстанция на този клас Главна: клас cMain ; cMain Главна;

И в основната функция () или WinMain () можете да използвате този клас нещо като това:

Основната програма линия може да изглежда така:

заключение

метод обработка на изключения, дадени в статията, е удобен и мощен инструмент, но само вие можете да решите да го използвате, или не. Човек може да бъде свален абсолютно сигурен - нашият метод да направят живота ви по-лесно. Ако искате да научите малко повече за изключения, вижте публикуването на Deep C ++ сървър на MSDN.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!