2012-07-31 99 views
1

我有一個C++對象,看起來像這樣編寫複雜的C++對象文件

class myClass 
{ 
    vector<OtherClass*> otherClassVector; 
    AnotherClass* anotherClassObj; 
    // A few other primitive types and functions 
} 

什麼是這個存儲到磁盤和讀回編程的最佳方式? 將在二進制模式下使用fstream讀/寫工作嗎?或者我應該使用boost序列化?爲什麼? 我不需要存儲的文件是人類可讀的。

+0

看看這個http://stackoverflow.com/questions/523872/how-do-you-serialize-an-object-in-c – Jeeva 2012-07-31 07:29:41

+1

fstream讀/寫在二進制模式下工作,只要你不'我認爲你可以一次性寫出整個對象。你將不得不編寫代碼來編寫每個單獨的子對象加上矢量大小和其他所有東西。這是爲了避免這種繁瑣且容易出錯的工作,您應該考慮使用boost。 – jahhaj 2012-07-31 07:30:10

回答

5

使用boost::serialization很簡單,比編寫自己的序列化程序。如果OtherClass是具體類型(不是基本) - 通過讀/寫序列化很簡單,對於矢量 - 只需保存大小和數組(如果myClass沒有非POD類型),然後將元素存儲在哪個點上anotheClassObj指針...

2

只有當這些對象是POD類型時,才能使用ofstream f("filename", std::binary);序列化對象。

其他任何需要手動處理。舉一個簡單的例子,如果對象包含任何指針,那麼這些指針的地址將被保存,而不是它們指向的數據。對於更復雜的類型,你將不得不完全手動序列化它們(編寫一個類或函數,它將保存類中的所有POD數據,並對所有「特殊」數據)做一些棘手的事情),或者使用boost序列化。

+0

什麼是包含指針與對象是POD或不是? – Grizzly 2012-07-31 15:13:15

+0

@Grizzly,沒什麼,這只是一個需要手動處理的例子。 – SingerOfTheFall 2012-07-31 15:16:29

+0

我意識到這一點,但如果我不知道我會認爲你的答案制定的方式有一個相關性 – Grizzly 2012-07-31 15:18:28