我有一个带有很多指针的树结构,基本上树的节点就像这样
class Node
{
Node *my_father;
QVector<Node*> my_children;
... a lot of data
}
我需要所有这些指针,以便在RAM内存中使我的工作更轻松。但现在我需要保存磁盘上的所有树结构..我正在考虑使用QDataStream序列化(http://www.developer.nokia.com/Community/Wiki/Qt_Object_Serialization)..但我不认为这是用指针工作..对吗?
您建议将这个大型结构保存在磁盘上并使用指针重新读入RAM吗?
答案 0 :(得分:2)
为什么不使用XML格式?它的设计非常容易使用所有结构化数据,嵌套对象,如您使用的树结构。但是你不想在其中存储指针 - 只是实际的数据。 (存储在指针中的数据,描述树结构本身将成为XML结构,因此您不需要它们。)
然后,当您为某个节点分配新子节点时,您需要在文件读取期间重新创建指针。
BTW对不起这个答案而不是评论,但我还不能写问题评论;]。
答案 1 :(得分:1)
显然,无法保证从磁盘读取的指针始终有效。但您仍然可以将它们用作“整数ID”,如下所示。要编写,请将指针与其余数据一起保存到磁盘。此外,对于每个类实例,将其自己的地址保存到磁盘。这将是该对象的“整数ID”。阅读,
1)使用保存的整数ID信息将每个对象与其子对象和父对象关联。最初,您可能必须将所有Node
读入一个大清单。
2)然后,一旦孩子,父亲在记忆中将他们的实际地址分别写入my_father
和my_children
。
对我来说有点讨厌,但我想不出更直接的方法来解决这个问题。