c++ - g++ __thread = 非平凡的构造函数

标签 c++ multithreading gcc g++

我想在 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/

相关文章:

c++ - vtkArrayCalculator - 访问输出时出现段错误

c++ - 将派生对象分配给函数内的基类指针

multithreading - FIFO队列的共识数量

gcc - 遵循 build-webos 的说明时,__libc_csu_fini 和 __libc_csu_init 未定义

C 字符串使用索引或指针复制字符

c++ - 如何从成员函数中释放对象?

java - 从 Java 代码调用 C++ 的问题 (Android)

c - gcc 链接器错误 : version node not found for symbol

c# - WCF 服务在单个线程中处理传入请求,尽管有 ConcurrencyMode.Multiple

.net - 运行单进程多线程 .NET 应用程序的 Azure 连续 WebJob 的 CPU 利用率较高