C++異常傳遞三種不同方式介紹
C++編程語言中同樣存在異常的相關(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)介紹。
【編輯推薦】