在許多情況下,我看到這種情況在pthread_create混亂
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);
}
我不明白這一點真的,我怎麼需要這正常嗎?
第一個肯定比較好,第二個是完全的災難。 – goji
是什麼意思?... – Kam
使用malloc分配內存塊的目的是什麼,然後通過執行pargs = args完全丟失內存塊?指向內存(pargs)的點是你分配內存的唯一鏈接,現在已經丟失了。它現在指向分配給新操作員的內存。 – goji