C++ - 管理基于磁盘的矢量中的引用

C++ - Managing References in Disk Based Vector

本文关键字:引用 磁盘 管理 于磁盘 C++      更新时间:2023-10-16

我正在开发一组向量类,它们都派生自一个抽象向量。我这样做是为了在使用这些向量的软件中,我们可以在向量之间快速切换,而不会破坏任何代码(或至少最大限度地减少故障,但我的目标是完全兼容(。所有向量都匹配。

我正在研究一种基于磁盘的矢量,它主要符合与 STL 矢量实现相匹配的。我这样做是因为我们需要处理包含各种格式数据的大量内存不足文件。磁盘矢量通过使用序列化和反序列化类的模板专用化/多态性来处理数据读/写到磁盘。数据序列化和反序列化已经过测试,并且可以正常工作(到目前为止(。处理对数据的引用时会出现我的问题。

例如

给定一个 DiskVector dv,对 dv[10] 的调用将获得磁盘上一个点,然后在那里寻找,读出字符流。此流被传递到反序列化器,该反序列化器将字节流转换为适当的数据类型。一旦我有了价值,我就归还它。

这就是我遇到问题的地方。在 STL 中,他们将其作为引用返回,因此为了匹配它们的样式,我需要返回一个引用。我所做的是将值存储在具有给定索引(在本例中为 10(的unordered_map中。然后我返回对unordered_map中值的引用。

如果这种情况在没有清理的情况下继续,那么 DiskVector 的目的就会丢失,因为所有数据都会加载到内存中,这由于数据大小而变得糟糕。因此,我稍后在进行其他调用时通过删除索引来清理此映射。不幸的是,如果用户决定长时间存储此引用,然后将其在 DiskVector 中删除,我们就会遇到问题。

所以我的问题

  • 有没有办法查看是否正在使用对某个实例的任何其他引用?
  • 有没有更好的方法来解决这个问题,同时仍然保持多态风格,原因如开头所述?
  • 是否可以构造一个特殊的类,该类将充当引用,但动态处理磁盘 IO,以便我可以返回它?
  • 还有其他想法吗?
因此,

我尝试做的更好的解决方案是使用 SQLite 作为数据库的后端。使用 BLOB 作为键列和值列的列类型。这就是我现在采取的方法。也就是说,为了让它正常工作,我需要使用 cdhowie 在评论中发布的内容来回答我的问题。