欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ 异常小记

程序员文章站 2024-03-07 13:30:39
...

catch必定使用拷贝构造函数

如下代码编译不通过,因为拷贝构造被标记delete

#include <stdexcept>
#include <cstdlib>
#include <iostream>

using namespace std;

class sonExc : public exception {
public:
    sonExc ( const char* const msg ) : exception ( msg ) {

    }
    sonExc ( const sonExc & e ) = delete;
};


int main()
{
    try {
        sonExc e { "Hello" };
        throw e;
    }
    catch ( sonExc &e ) {
        cout << "sonExc:" << e.what() << endl;
    }
    catch ( exception &e ) {
        cout << "exception:" << e.what() << endl;
    }

    system ( "pause" );
}

throw 指针

依照优先匹配原则
可以匹配 基类指针、本类指针和void*,哪个在前面优先哪个

#include <stdexcept>
#include <cstdlib>
#include <iostream>

using namespace std;

class sonExc : public exception {
public:
    sonExc ( const char* const msg ) : exception ( msg ) {

    }
    sonExc ( const sonExc & e ) = delete;
};


int main()
{
    try {
        sonExc *e = new sonExc{ "Hello" };
        throw e;
    }
    catch ( int e ) {
        cout << "int *" << ( e ) << endl;
    }
    catch ( void* e ) {
        cout << "void *" << reinterpret_cast<int> ( e ) << endl;
    }
    catch ( sonExc *e ) {
        cout << "sonExc:" << e->what() << endl;
    }
    catch ( exception *e ) {
        cout << "exception:" << e->what() << endl;
    }

    system ( "pause" );
}

posted on 2018-02-01 22:13 开学五年级了 阅读(...) 评论(...) 编辑 收藏