是否存在标准(任何C ++标准)方式来注册回调,在具有自动存储持续时间的任何对象被破坏之前不久会被调用作为正常程序终止的一部分?
编辑:
更清楚地说明这一点。这是一个多线程应用程序。有些对象可能会将仿函数推入线程池,引用它们(仿函数访问“创建者”对象)。线程池对象是静态的,因此它会在 main()
返回后被销毁,因此在将所有将对象推入线程池的对象之后,它们已经被销毁了。线程池在终止时刷新,因此仿函数对其中的“始发者”对象有悬空引用。
答案 0 :(得分:2)
std :: atexit应该做你想做的事:
注册func指向的函数,在正常程序终止时调用(通过std :: exit()或从cpp / language / main函数返回)
http://en.cppreference.com/w/cpp/utility/program/atexit'
你可能也想在std :: terminate_handler上添加一些内容。