我有一個問題,而黑客一個更大的項目,所以我做了一個simpel測試用例。如果我沒有遺漏某些東西,我的測試代碼可以正常工作,但也許它意外地工作,所以我想向您展示它,並詢問此方法是否存在任何缺陷。來自void *的Casting/dereferencing成員變量指針是否安全?
我有一個OutObj有一個成員變量(指針)InObj。 InObj有一個成員函數。我將這個成員變量對象(InObj)的地址作爲void *發送到回調函數。這個對象的類型永遠不會改變,所以在我重新調用它的原始類型並調用其中的aFunc成員函數的回調中。在這個例子中,它按預期工作,但在我正在研究的項目中卻沒有。所以我可能會省略一些東西,或者在這裏有一個陷阱,而且這是偶然的。任何意見?提前致謝。
(我在我原來的代碼中的問題是,InObj.data是垃圾)。
#include <stdio.h>
class InObj
{
public:
int data;
InObj(int argData);
void aFunc()
{
printf("Inside aFunc! data is: %d\n", data);
};
};
InObj::InObj(int argData)
{
data = argData;
}
class OutObj
{
public:
InObj* objPtr;
OutObj(int data);
~OutObj();
};
OutObj::OutObj(int data)
{
objPtr = new InObj(data);
}
OutObj::~OutObj()
{
delete objPtr;
}
void callback(void* context)
{
((InObj*)context)->aFunc();
}
int main()
{
OutObj a(42);
callback((void*)a.objPtr);
}
一目瞭然,它看起來不錯。在您的應用中定義「不起作用」。 – Stephen 2010-06-11 03:45:21
您在項目中遇到的確切問題是什麼? – Canopus 2010-06-11 03:47:25
我在我的原始代碼中存在的問題是InObj.data是垃圾。所以,如果這看起來不錯,我應該睡一覺,並找到我的代碼中的明顯錯誤。 – Damien 2010-06-11 03:48:09