我想在 g++ 中使用 __thread 修饰符来替代 C++11 中的 thread_local。不幸的是,我的本地线程变量没有简单的构造函数(它必须设置一个整数分量的值)。 我考虑使用这种构造:
__thread MyVariable *var;
__thread MyVariable* MyClass::var = nullptr;
每次我想获得对 var 的访问时,我都会检查它是否已分配:
if(var == nullptr)
var = new MyVariable(42);
但我不知道如何释放以这种方式分配的内存。
最佳答案
__thread
存储说明符无法处理具有非平凡构造函数和析构函数的对象。
对于具有非平凡构造函数和析构函数的对象,您可能喜欢使用 boost::thread_specfic_ptr<>
.当线程终止时 boost::thread_specfic_ptr<>
调用 delete
在相应的线程特定对象上。
关于c++ - g++ __thread = 非平凡的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148640/