2012-07-31 68 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