当一个函数使用atexit()注册名为(When is a function registered

2019-07-04 04:18发布

我想知道如果与注册功能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