在很多场合我都看到过这种情况
class Foo
{
static void* ThreadFun(void* p)
{
Derived* args = (Derived*)p;
//do something with args.
//example
//cout << args->getname();
}
void function()
{
Base* args = new Derived();
args->setname("test");
pthread_t id;
int ret = pthread_create(&id, NULL, ThreadFun, (void*) args);
}
}
首先,那是正确的 C++ 代码吗?还是我错过了什么?我做了一些阅读,显然将指向类的指针转换为 void* 会导致信息丢失,并且在派生类上调用 getname() 可能是非法的。
如果我理解正确,他们的建议是这样的:
void function()
{
Base* args = new Derived();
args->setname("test");
void* pargs = (Base*)malloc(sizeof(*args)); // to be freed in ThreadFun
pargs = args;
pthread_t id;
int ret = pthread_create(&id, NULL, ThreadFun, pargs );
}
我真的不明白,我该如何正确地做到这一点?