C++ - 管理基于磁盘的矢量中的引用
C++ - Managing References in Disk Based Vector
我正在开发一组向量类,它们都派生自一个抽象向量。我这样做是为了在使用这些向量的软件中,我们可以在向量之间快速切换,而不会破坏任何代码(或至少最大限度地减少故障,但我的目标是完全兼容(。所有向量都匹配。
我正在研究一种基于磁盘的矢量,它主要符合与 STL 矢量实现相匹配的。我这样做是因为我们需要处理包含各种格式数据的大量内存不足文件。磁盘矢量通过使用序列化和反序列化类的模板专用化/多态性来处理数据读/写到磁盘。数据序列化和反序列化已经过测试,并且可以正常工作(到目前为止(。处理对数据的引用时会出现我的问题。
例如
给定一个 DiskVector dv
,对 dv[10]
的调用将获得磁盘上一个点,然后在那里寻找,读出字符流。此流被传递到反序列化器,该反序列化器将字节流转换为适当的数据类型。一旦我有了价值,我就归还它。
这就是我遇到问题的地方。在 STL 中,他们将其作为引用返回,因此为了匹配它们的样式,我需要返回一个引用。我所做的是将值存储在具有给定索引(在本例中为 10(的unordered_map中。然后我返回对unordered_map中值的引用。
如果这种情况在没有清理的情况下继续,那么 DiskVector 的目的就会丢失,因为所有数据都会加载到内存中,这由于数据大小而变得糟糕。因此,我稍后在进行其他调用时通过删除索引来清理此映射。不幸的是,如果用户决定长时间存储此引用,然后将其在 DiskVector 中删除,我们就会遇到问题。
所以我的问题
- 有没有办法查看是否正在使用对某个实例的任何其他引用?
- 有没有更好的方法来解决这个问题,同时仍然保持多态风格,原因如开头所述?
- 是否可以构造一个特殊的类,该类将充当引用,但动态处理磁盘 IO,以便我可以返回它?
- 还有其他想法吗?
我尝试做的更好的解决方案是使用 SQLite 作为数据库的后端。使用 BLOB 作为键列和值列的列类型。这就是我现在采取的方法。也就是说,为了让它正常工作,我需要使用 cdhowie 在评论中发布的内容来回答我的问题。
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++ - 管理基于磁盘的矢量中的引用