多くの場合、私はこの状況を見てきました
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 );
}
私はそれを本当に理解していません、どうすればこれを適切に行う必要がありますか?