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

函数内具有静态或线程存储期的对象已析构,之后该函数又被调用并引用到已析构的对象

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

示例:

// In T.cpp
void foo() {
    static T sObj;
    ....
}

// In U.cpp
class U {
    ....
public:
   ~U() {
        foo();   // Undefined behavior if ‘sObj’ is destructed
    }
};

U gObj;   // Problematic

当例中全局对象 gObj 析构时会调用 foo 函数,如果这时 foo 函数中的静态对象 sObj 已析构,会导致未定义的行为,gObj 与 sObj 的析构顺序在标准中是不确定的。

依据

ISO/IEC 14882:2003 3.6.3(2)-undefined ISO/IEC 14882:2011 3.6.3(2)-undefined
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.