具有静态或线程存储期的对象在析构函数中调用 std::exit 函数
C++-Undefined-Behavior-11
程序调用 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