2012-02-05 78 views
1

我想使用__thread改性剂,如在C++ 11 thread_local取代,以g ++。不幸的是,我的本地线程变量没有简单的构造函数(它必须设置一个整数组件的值)。 我想使用这样的结构:每次我想获得的存取权限变种我检查它是否被分配时间克++ __thread =非平凡的构造

__thread MyVariable *var; 

__thread MyVariable* MyClass::var = nullptr; 

结束:

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

但我也没办法,如何以这种方式免费分配内存。

+0

'在你的线程生命周期结束delete'它。 – 2012-02-05 11:48:03

回答

2

__thread存储说明符不能处理不平凡的构造函数和析构函数的对象。

对于非平凡的构造函数和析构函数的对象,你可能愿意使用boost::thread_specfic_ptr<>。当线程终止时boost::thread_specfic_ptr<>在相应的线程专用对象上调用delete

+0

不幸的是,我不能在类中使用boost :: thread_specific_ptr <>,它将被传递给std :: thread。 http://pastebin.com/vckyqLME – Dejwi 2012-02-05 14:05:26

+0

重现该错误的简单示例: http://pastebin.com/qW2gkiay – Dejwi 2012-02-05 16:13:06

+0

'boost :: thread_specfic_ptr <>'是不可复制的,但是,“Run '传递给'thread'构造函数时被复制。 – 2012-02-05 16:16:44