C++ g++__线程=非平凡构造函数

C++ g++__线程=非平凡构造函数,c++,multithreading,gcc,g++,C++,Multithreading,Gcc,G++,我想在g++中使用uu线程修饰符,作为C++11中线程u本地的替代。不幸的是,我的局部线程变量没有简单的构造函数(它必须设置一个整数组件的值)。 我考虑使用这种结构: __thread MyVariable *var; __thread MyVariable* MyClass::var = nullptr; 每次我想获得var访问权限时,我都会检查它是否已分配: if(var == nullptr) var = new MyVariable(42); 但我不知道如何以这种方式释放分配

我想在g++中使用uu线程修饰符,作为C++11中线程u本地的替代。不幸的是,我的局部线程变量没有简单的构造函数(它必须设置一个整数组件的值)。 我考虑使用这种结构:

__thread MyVariable *var;

__thread MyVariable* MyClass::var = nullptr;
每次我想获得var访问权限时,我都会检查它是否已分配:

if(var == nullptr)
   var = new MyVariable(42);

但我不知道如何以这种方式释放分配的内存。

\uu线程
存储说明符无法处理具有非平凡构造函数和析构函数的对象


对于具有非平凡构造函数和析构函数的对象,您可能希望使用
boost::thread\u specfic\u ptr
。当线程终止时,
boost::thread\u specific\u ptr
调用相应的线程特定对象上的
delete

我编写了一个小的演示程序,演示如何定义一个线程本地宏,该宏使用非平凡类型,并以线程持续时间存储所有内容。它优于boost::thread_specific_ptr,因为它不进行任何动态内存分配

见我对这个问题的回答:


在线程生命周期结束时删除它。不幸的是,我不能在类中使用boost::thread_specific_ptr,它将传递给std::thread<代码>boost::thread_specific_ptr
是不可复制的,但是,
Run
的实例在传递到
thread
构造函数时会被复制。请解释您试图用线程特定存储解决的问题。您发布的示例代码没有提供足够的上下文。