存储指向类对象的指针地址的最佳方法

时间:2011-10-26 07:16:28

标签: c++ file-io vector

我有一个A类,它的对象是动态创建的:

A *object;
object = new A;

执行中会有很多A对象。 我在A中创建了一个方法,根据传递的id返回特定对象的地址。

A *A::get_obj(int id)

get_obj 的实现需要itteration,所以我选择了向量来存储对象的地址。

vector<A *> myvector

我认为另一种方法是创建一个文件&amp;将地址存储为特定行上的文本(这将是id)。 这将帮助我减少内存使用量,因为我不会创建一个向量。 我不知道的是,这种方法会比矢量方法消耗更多的时间吗? 任何其他做同样的选择都是受欢迎的。

3 个答案:

答案 0 :(得分:5)

不要将指针存储在文件中。永远。无论如何,对象A占用的空间比指向它们的指针多。如果您需要的A值比一次可以容纳的多,那么您需要根据需要创建它们,并将实例数据序列化为磁盘,如果您需要在删除之前将其恢复,而不是地址。

答案 1 :(得分:3)

  

这种方法比矢量方法消耗更多的时间吗?

是的,它会消耗更多的时间 - 每次查找都会花费数千倍的时间。如果查找很少见,这不会受到影响,但如果频繁查找,则可能不好。

  

这将有助于我减少内存使用

您希望以这种方式管理多少个对象?你确定内存使用会有问题吗?

  

欢迎任何其他做同样的选择

这是你的两个选择,真的。您可以在内存或磁盘上管理列表。根据您的使用场景,您可以组合使用这两种方法。例如,您可以将经常使用的对象保留在内存中,并将不经常使用的对象写入磁盘(这基本上是缓存)。

答案 2 :(得分:2)

将数据存储在文件中会比在RAM中慢得多。

关于数据结构本身,如果你经常使用所有ID,那么如果你的向量通常有空单元格,那么std::vector可能是最合适的方法。但是如果你的矢量有很多空单元格,std::map可能会给你一个更好的解决方案。它将消耗更少的内存并提供O(logN)访问复杂性。

这里最重要的是imho,就是数据集和平台的大小。对于现代PC来说,处理数千个条目的内存映射非常快,但是如果你处理千兆字节的数据,你最好将它存储在真正的磁盘数据库(例如MySQL)中。

相关问题