前几次我用 C++ 编写了一个通用的内存 B+Tree 实现,我正在考虑让它在磁盘上持久化(这就是最初设计 B+Tree 的原因)。我的第一个想法是使用 mmap (我在 Linux 下)能够将文件作为普通内存进行操作,然后重写新的我的节点类的运算符,以便它返回映射部分中的指针并创建一个智能指针,该指针可以将 RAM 地址转换为文件偏移量,以将我的节点与其他节点链接。但我希望我的实现是通用的,因此用户可以在 B+tree 中存储一个 int、一个 std::string 或任何他想要的自定义类。这就是问题发生的地方:对于不包含指针的原始类型或聚合类型,这一切都很好,但是一旦对象包含对堆分配对象的指针/引用,这种方法就不再有效。
所以我的问题是:是否有一些已知的方法来克服这个困难?我对该主题的个人搜索最终不成功,但也许我错过了一些东西。