C++ 异常小记

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  开学五年级了 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/qwsdcv/p/8401494.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值