0

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

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?

4

2 回答 2

2

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

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

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

于 2012-07-25T12:26:32.247 回答
1

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

1)使用保存的整数ID信息将每个对象与它的孩子和父亲相关联。最初,您可能必须将所有Nodes 读入一个大列表。

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

对我来说感觉有点 hacky,但我想不出更直接的方法来解决这个问题。

于 2012-07-24T22:20:00.373 回答