c++ - How to only disable destruction of objects in thread-local-storage? -
#include <cstdlib> #include <thread> #include <chrono>  using namespace std; using namespace std::literals;  struct {     a() { cout << "a()" << endl; }         ~a() { cout << "~a()" << endl; } };  g_a;  int main() {     thread([]()     {         thread_local a;         this_thread::sleep_for(24h);     }).detach();      exit(0); // not ok     quick_exit(0); // still not ok } - global objects , objects in thread-local-storagedestructed after callingexit(0);
- global objects , objects in thread-local-storagenot destructed after callingquick_exit(0);
is possible:
global objects destructed after calling some_exit_func(0); while objects in thread-local-storage not destructed.
problem background:
i have big legacy project, has used
thread-local-storagestore many c++ objects; before c++11, these objects not destructed automatically, former writer explicitly calls destructors.now, want recompile c++11 compiler; faced such problem:
- if use
exit(0), objects inthread-local-storagedouble-destructed;- if use
quick_exit(0), global variables not destructed.
 
 
Comments
Post a Comment