我只是使用thread_local在其较低的模块中共享我的对象。但它始终采用最后一个实例对象数据。
码
Test1.h
thread_local void* currentpointer=nullptr;
Test1::Test1(int val)
{
currentpointer = this;
obj = new Test2;
temp = val;
}
void Test1::display()
{
qDebug()<<Q_FUNC_INFO<<temp;
}
Test1.cpp
class Test2
{
public:
Test2();
void display();
};
Test2.h
Test2::Test2()
{
}
void Test2::display()
{
((Test1*)currentpointer)->display();
}
测试2.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();
}
的main.cpp
{{1}}
响应:
void Test1 :: display()300
void Test1 :: display()300
void Test1 :: display()300
我在这里做错了什么可以帮助我摆脱这个问题。
答案 0 :(得分:1)
按此顺序创建对象
Test1 obj1(100);
Test1 obj2(200);
Test1 obj3(300);
Test1::obj
获取每个Test1对象的Test2
对象ptr。
void Test2::display()
{
((Test1*)currentpointer)->display();
}
返回currentpointer
静态变量
currentpointer
ctor时,和Time1
都会被设置
Test1::Test1(int val)
{
currentpointer = this;
obj = new Test2;
temp = val;
}
所以基本上你的代码工作得很完美,静态变量逻辑就是
obj1.obj->display();
obj2.obj->display();
obj3.obj->display();
返回相同的对象,从而显示相同的字符串