我想知道如果与注册功能atexit()
之前或全局变量被销毁后调用。 这是由标准或执行指定的定义?
Answer 1:
它是良好定义的,并且取决于所讨论的对象是否是之前或功能得到使用注册之后建造atexit()
3.6.3终止
3.如果具有静态存储持续时间的对象的初始化的完成呼叫之前测序以
std::atexit
(见<cstdlib>
,18.5),调用传递给函数std::atexit
被调用之前测序到的析构函数的对象。 如果调用std::atexit
与静态存储生存期的对象的初始化完成之前测序,调用析构函数的对象调用传递给函数之前测序std::atexit
。 如果调用std::atexit
被另一个调用之前测序std::atexit
,调用传递给第二功能std::atexit
调用调用传递给第一个函数之前测序std::atexit
通话。
以上我外行的解释是,得到了构建你打电话之前,这些东西atexit(handler)
之后被销毁handler()
被调用,反之亦然。 我肯定有玄机,不过这似乎是基本原则。
文章来源: When is a function registered with atexit() called