线程本地为对象
问题描述:
的所有instaces我只是用thread_local分享我的对象在其下部模块显示相同的数据。但它总是取最后一个实例的对象数据。线程本地为对象
代码:
Test1.h
class Test2;
extern thread_local void* currentpointer;
class Test1
{
public:
Test1(int val);
void display() ;
Test2 *obj;
private:
int temp;
};
Test1.cpp
thread_local void* currentpointer=nullptr;
Test1::Test1(int val)
{
currentpointer = this;
obj = new Test2;
temp = val;
}
void Test1::display()
{
qDebug()<<Q_FUNC_INFO<<temp;
}
Test2.h
class Test2
{
public:
Test2();
void display();
};
测试2.cpp
Test2::Test2()
{
}
void Test2::display()
{
((Test1*)currentpointer)->display();
}
的main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Test1 obj1(100);
Test1 obj2(200);
Test1 obj3(300);
obj1.obj->display();
obj2.obj->display();
obj3.obj->display();
return a.exec();
}
响应:
空隙测试1 ::显示()300
空隙测试1 ::显示()300
空隙测试1: :显示器()300
我在这里做了什么错,有人可以帮我解决这个问题。
答
按此顺序
Test1 obj1(100);
Test1 obj2(200);
Test1 obj3(300);
Test1::obj
让你每个Test1的对象的Test2
对象PTR创建对象。
void Test2::display()
{
((Test1*)currentpointer)->display();
}
返回currentpointer
静态变量
和currentpointer
得到每个Time1
构造函数被调用时设置
Test1::Test1(int val)
{
currentpointer = this;
obj = new Test2;
temp = val;
}
所以基本上你的代码可以完美运行,静态变量的逻辑只是让
obj1.obj->display();
obj2.obj->display();
obj3.obj->display();
返回相同的对象,从而显示相同的字符串
呃...你没有任何线程? (好吧,1,'main()'线程)。 – BoBTFish