C++異常傳遞三種不同方式介紹
C++編程語(yǔ)言中同樣存在異常的相關(guān)操作。我們可以使用throw來解決異常處理。那么今天我們將會(huì)針對(duì)這一方面的知識(shí)重點(diǎn)介紹一下C++異常傳遞的相關(guān)方法,希望能夠給大家?guī)硪恍椭?/p>
C++異常傳遞之1.傳值(by value)
傳值的過程中會(huì)產(chǎn)生臨時(shí)對(duì)象的拷貝,不能解決多態(tài)的問題,如下:myexception繼承exception,但是但確無法被正確的調(diào)用myexception的方法,造成對(duì)異常對(duì)象的切割。
- class myexception:public exception{
 - public:
 - virtual const char* what() throw();
 - };
 - const char* myexception::what(){
 - return "myException";
 - }
 - class A{
 - public:
 - A(){}
 - void f() throw(){
 - throw myexception();
 - }
 - };
 - int main(){
 - A a;
 - try{
 - a.f();
 - }catch(exception exc){
 - cout<<exc.what();
 - }
 - }
 
運(yùn)行結(jié)果:UnKnown exceptions
程序執(zhí)行是會(huì)調(diào)用exception的what方法,而不是myexception的what方法。
C++異常傳遞之2.傳指針(by pointer)
指針可以實(shí)現(xiàn)多態(tài),但往往會(huì)將臨時(shí)對(duì)象的地址作為指針傳出去,出現(xiàn)懸掛指針錯(cuò)誤。如果在堆上分配內(nèi)存空間,又往往不知道何時(shí)刪除對(duì)象,出現(xiàn)to be or not to be的錯(cuò)誤。
結(jié)果顯示:myException
- class myexception:public exception{
 - public:
 - virtual const char * what() const;
 - };
 - const char* myexception::what() const{
 - return "myException";
 - }
 - class A{
 - public:
 - A(){}
 - void f() throw(){
 - throw new myexception();
 - }
 - };
 - int main(){
 - A a;
 - try{
 - a.f();
 - }catch(exception* pexc){
 - cout<<pexc->what();
 - delete pexc;
 - }
 - }
 
C++異常傳遞之3.傳引用(by reference)
傳引用是***的方法,可以克服前面的兩個(gè)問題。
程序結(jié)果顯示:myException
- class myexception:public exception{
 - public:
 - virtual const char * what() const;
 - };
 - const char* myexception::what() const{
 - return "myException";
 - }
 - class A{
 - public:
 - A(){}
 - void f() throw(){
 - throw myexception();
 - }
 - };
 - int main(){
 - A a;
 - try{
 - a.f();
 - }catch(exception& exc){
 - cout<<exc.what();
 - }
 - }
 
以上就是對(duì)C++異常傳遞的相關(guān)介紹。
【編輯推薦】















 
 
 



 
 
 
 