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

具有静态或线程存储期的对象在析构函数中调用 std::exit 函数

C++-Undefined-Behavior-11
目录 › next › previous

程序调用 exit 函数后,全局、静态或 thread_local 对象开始析构,而这种对象的析构函数再调用 exit 会导致未定义的行为。

示例:

class T {
    ....
public:
   ~T() {
        std::exit(1);  // Dangerous
    }
};

static T obj;  // Undefined behavior during destruct

例中 obj 对象在析构时会导致未定义的行为。

依据

ISO/IEC 14882:2003 3.6.1(4)-undefined ISO/IEC 14882:2011 3.6.1(4)-undefined

规则

ID_exitCallInDestructor
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.