我正在使用类将记录存储在文件中。而且我需要创建一个单独的索引文件,该文件存储一个键(每个记录都是唯一的)和一个指向记录的对应地址位置,以减少访问时间。我以为可以指向该类对象的指针。但是,如何在文件中读写指针?
答案 0 :(得分:0)
You'd need to manage your memory allocation yourself. In the simplest approach (illustrative, not recommended), you'd just allocate a block of memory on the heap big enough for all your records, then save your pointers in file as offsets from the beginning of that block (and, when reading, convert the offsets back to actual pointers).
Or perhaps store the records in a file and then record file positions (file offsets) instead of pointers for quick access via seek.
答案 1 :(得分:0)
我认为可以使指针指向类对象。
正确。指针可以指向类对象。
但是如何从文件读取指针或向文件写入指针?
您可以将数据指针重新解释为std::uintptr_t
,这是一种整数类型。您可以将整数写入文件。
相反,可以从文件中读取整数,并将其重新解释为指针。
请注意,如果所指向的对象不再存在,则指针值可能变为无效。在一个程序的多次执行之间不能存在任何对象,因此存储的指针值只能在写入该对象的执行过程中保持有效。
一个较小的文件,每个文件具有唯一的键,然后相应的地址直接指向完整记录的存储位置。
因此,您想“指向”文件中的某个位置。那不是一个“对象”。指针不能指向文件中的位置。
似乎您需要的只是一个整数:文件中记录的第一个字节的偏移量。因此,如果您将记录写在偏移量12345中,则可以使用整数12345“指向”该偏移量。