☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

内存回收函数不可抛出异常

7.9 ID_throwInDelete
目录 › next › previous

内存回收函数抛出异常会导致标准未定义的行为。

抛出异常后,从 throw 表达式到相应 catch 子句各层调用栈中的对象会被自动析构,并释放内存空间,如果在这个过程中抛出异常便违反了异常处理机制,导致未定义的行为。

示例:

void operator delete(void* p) {
    if (check_invalid(p)) {
        throw Exception();    // Non-compliant, undefined behavior
    }
    deallocate(p);
}

例中 operator delete 通过自定义内存管理方法拒绝非法地址,但不应抛出异常,应直接终止程序的执行。

相关

ID_throwInDestructor ID_throwInHash ID_throwInSwap ID_throwInMove

依据

ISO/IEC 14882:2003 15.2(3) ISO/IEC 14882:2011 3.7.4.2(3)-undefined ISO/IEC 14882:2011 15.2(3)

参考

C++ Core Guidelines E.16
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.