CppCoreGuidelines E.26 如果无法抛出异常,请考虑快速结束
12 August 2023
“If you can’t throw exceptions, consider failing fast”
理由
如果无法很好的进行出错恢复,那么,至少在没有造成太大损失之前,早早结束。
注意
如果你无法系统化地处理出错情况,对于无法局部处理的错误,考虑直接让程序“崩溃”。也就是说,如果在函数检测到错误的时候,无法从错误中恢复回来,可以调用 abort()
, quick_exit()
等类似的函数触发系统重启。
如果,在系统中,你有很多进程,或者很多计算机,你有预见,将来会需要处理很多严重的系统崩溃情况。比如说,硬件出错。这些情况,崩溃只是意味着某个错误需要上一层的计算系统来处理罢了。
例子
void f(int n) { // ... p = static_cast<X*>(malloc(n * sizeof(X))); if (!p) abort(); // abort if memory is exhausted // ... }
很多程序无法优雅的处理内存耗尽的情况。此例子大概等价于下面这个例子:
void f(int n) { // ... p = new X[n]; // throw if memory is exhausted (by default, terminate) // ... }
典型的来说,最好在“崩溃”之前记录一条日志,表明崩溃的原因。