// This class provides a facility similar to the CRT atexit(), except that // we control when the callbacks are executed. Under Windows for a DLL they // happen at a really bad time and under the loader lock. This facility is // mostly used by base::Singleton. // // The usage is simple. Early in the main() or WinMain() scope create an // AtExitManager object on the stack: // int main(...) { // base::AtExitManager exit_manager; // // } // When the exit_manager object goes out of scope, all the registered // callbacks and singleton destructors will be called.
exit_manager离开作用域,所有的回调函数,单例的析构函数将会被调用。
再看看头文件
class AtExitManager { protected: // This constructor will allow this instance of AtExitManager to be created // even if one already exists. This should only be used for testing! // AtExitManagers are kept on a global stack, and it will be removed during // destruction. This allows you to shadow another AtExitManager. AtExitManager(bool shadow); public: typedef void (*AtExitCallbackType)(void*); AtExitManager(); // The dtor calls all the registered callbacks. Do not try to register more // callbacks after this point. ~AtExitManager(); // Registers the specified function to be called at exit. The prototype of // the callback function is void func(). static void RegisterCallback(AtExitCallbackType func, void* param); // Calls the functions registered with RegisterCallback in LIFO order. It // is possible to register new callbacks after calling this function. static void ProcessCallbacksNow();
使用方法很简单,只要在main函数最开始的地方,定义一个即可
int main(...) { base::AtExitManager exit_manager; .... }
原文:https://www.cnblogs.com/ckelsel/p/9158805.html