C++ 异常小记

时间:2022-09-15 19:11:43

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" );
}