掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
C++編程語言中同樣存在異常的相關(guān)操作。我們可以使用throw來解決異常處理。那么今天我們將會(huì)針對這一方面的知識(shí)重點(diǎn)介紹一下C++異常傳遞的相關(guān)方法,希望能夠給大家?guī)硪恍椭?/p>

C++異常傳遞之1.傳值(by value)
傳值的過程中會(huì)產(chǎn)生臨時(shí)對象的拷貝,不能解決多態(tài)的問題,如下:myexception繼承exception,但是但確無法被正確的調(diào)用myexception的方法,造成對異常對象的切割。
- 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<
- }
- }
運(yùn)行結(jié)果:UnKnown exceptions
程序執(zhí)行是會(huì)調(diào)用exception的what方法,而不是myexception的what方法。
C++異常傳遞之2.傳指針(by pointer)
指針可以實(shí)現(xiàn)多態(tài),但往往會(huì)將臨時(shí)對象的地址作為指針傳出去,出現(xiàn)懸掛指針錯(cuò)誤。如果在堆上分配內(nèi)存空間,又往往不知道何時(shí)刪除對象,出現(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<
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<
- }
- }
以上就是對C++異常傳遞的相關(guān)介紹。
【編輯推薦】

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流