Qt-序列化一个树结构(大量指针)

Qt - Serializing a tree structure (a lot of pointers)

本文关键字:结构 指针 一个 Qt- 序列化      更新时间:2023-10-16

我有一个有很多指针的树结构,基本上树的一个节点就像这个

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中?

为什么不使用XML格式?它在设计上非常容易与所有结构化数据和嵌套对象一起使用,就像您使用的树结构一样。但您不想在其中存储指针,只想存储实际数据。(存储在指针中的描述树结构的数据本身将成为XML结构,因此您不需要它们)。

然后,当您为某个节点分配新的子节点时,您需要在文件读取期间重新创建指针。

顺便说一句,很抱歉做出这个回答,不发表评论,但我还不能写问题评论;]。

显然,不能保证从磁盘读取的指针是有效的。但是您仍然可以将它们用作"整数ID",如下所示。要进行写入,请将指针与其余数据一起保存到磁盘。此外,对于每个类实例,将其自己的地址保存到磁盘。这将是该对象的"integer ID"。要读取,

1) 使用保存的整数ID信息将每个对象与其子对象和父对象相关联。最初,您可能需要将所有Node读入一个大列表中。

2) 然后,一旦孩子、父亲在存储器中,将他们的实际地址分别写入my_fathermy_children

我觉得有点生气,但我想不出更直接的方法了。