不应抛出指针
7.24 ID_throwPointer
抛出指针会增加不必要的内存管理成本,也容易造成意料之外的错误。
示例:
class E {} e;
void foo() {
if (cond) {
throw &e; // Non-compliant
} else {
throw new E; // Non-compliant
}
}
void bar() {
try {
foo();
} catch (E* p) { // ‘p’ should be deleted or not??
....
}
}
例中对捕获的异常指针不论释放还是不释放都有问题,改为抛出对象的方式可有效避免这种问题。
参考
MISRA C++ 2008 15-0-2