Essential C++ 笔记 - 第七章异常处理
程序员文章站
2022-07-13 21:45:19
...
Essential C++ 笔记 - 第七章异常处理
一、抛出异常 / 捕捉异常
void test(int i, string s){
try {
if(i == 0) {
throw i;
}
if(s == nullptr) {
throw "nullptr";
}
}
catch(int errno) {
cout << "i is 0" << endl;
}
catch(const char* str) {
cout << "s is nullptr" << endl;
}
}
// 能抛出任何类型的异常
void fun ();
// 后面括号里面是一个异常参数表,本例中能抛出这3中异常
void fun () throw(except1,except2,except3)
// 参数表为空,不能抛出异常
void fun () throw()
二、局部资源管理
extern Mutex m;
void f() {
try{
// 索求资源
int* p = new int;
m.accquire();
process(p);
// 释放资源
m.release();
delete p;
}
catch(...){
m.release();
delete p;
}
}
三、标准异常
#include <exception>
class iterator_overflow: public exception {
public:
iterator_overflow(int index, int max):
_index(index), _max(max) {}
int index() { return _index; }
int max() { return _max; };
// overides exception::what()
const char* what() const;
private:
int _index;
int _max;
}
// iterator_overflow类的what()实现
#include <sstream>
#include <string>
const char* iterator_overflow::what() {
ostringstream ex_msg;
static string msg;
ex_msg << "Internal error: current index " << _index << " exceeds maximum bound: " << _max;
msg = ex_msg.str();
return msg.c_str();
}
int main() {
try {
throw iterator_overflow();
}
catch(iterator_overflow& e) {
cout << e.what() << endl;
}
}
上一篇: 第七章 类和对象
下一篇: vue隐藏和显示元素