1

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

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

例如,

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

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

如果这种情况在没有清理的情况下继续下去,那么 DiskVector 的用途就会丢失,因为所有数据都刚刚加载到内存中,这对数据大小来说是很糟糕的。因此,我稍后在进行其他调用时通过删除索引来清理此地图。不幸的是,如果用户决定长时间存储此引用,然后它在 DiskVector 中被删除,我们就会遇到问题。

所以我的问题

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

1 回答 1

0

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

于 2014-12-27T16:20:21.200 回答