我出於好奇而不是困難問這個問題,因爲我總是從你那裏學習,甚至在無關的主題上。我可以將char *緩衝區轉換爲對象類型嗎?
所以,考慮下面的方法,用C++編寫,並用克++相連。這種方法工作正常,因爲一切都被初始化爲正確的大小。現在
extern "C"
{
void retrieveObject(int id, char * buffer)
{
Object::Object obj;
extractObject(id, obj);
memcpy(buffer, &obj, sizeof(obj));
}
}
// Prototype of extractObject
const bool extractObject(const int& id, Object::Object& obj) const;
,我想避免本地Object
和使用memcpy
的聲明。
我試過的東西,如更換retrieveObject
:
void retrieveObject(int id, char * buffer)
{
// Also tried dynamic_cast and C-Style cast
extractObject(id, *(reinterpret_cast<Object::Object *>(buffer)));
}
它編譯和鏈接成功,但崩潰的時候了。考慮到我的緩衝區足夠容納一個Object
,C++是否需要調用構造函數來「塑造」內存?是否有另一種方法來取代局部變量和memcpy?
我希望我是很清晰爲你解答,謝謝提前。
問題是,你爲什麼要這樣做?這些東西在C++中幾乎沒有必要。 (如果您正在序列化爲文件或網絡通信,則不是這樣。) – Thanatos 2011-01-06 10:45:36
對象創建應該涉及構造函數。在構造函數中使用緩衝區。 – DumbCoder 2011-01-06 10:46:09
我想知道爲什麼extractObject()的返回類型是`const bool`,爲什麼它說'const int&`是它的一個參數。有什麼優勢? – Nawaz 2011-01-06 10:50:42