[英]Best way to store a pointer to base class, but be able to use derived class functions
[英]best way to store adresses of pointer to an object of class
我有一个A类,其对象是动态创建的:
A *object;
object = new A;
一个执行中将有许多A对象。 我已经在A中创建了一个方法,以根据传递的ID返回特定对象的地址。
A *A::get_obj(int id)
get_obj的实现需要提示,因此我选择了矢量来存储对象的地址。
vector<A *> myvector
我认为另一种方法是通过创建文件并将地址作为文本存储在特定行上(这将是ID)。 这将帮助我减少内存使用量,因为那样我就不会创建向量了。 我不知道的是,这种方法会比矢量方法消耗更多的时间吗? 欢迎您选择执行此操作的其他任何方式。
不要将指针存储在文件中。 曾经 无论如何,对象A占用的空间比指向它们的指针大。 如果需要的A数超过一次可容纳的数,则需要根据需要创建它们,并将实例数据序列化到磁盘上(如果需要稍后在删除之前将它们取回而不是地址)。
这种方法会比向量方法消耗更多时间吗?
是的,这将花费更多时间-每次查找将花费数千倍的时间。 如果很少进行查找,这不会造成损害,但是如果查找频繁,则可能会很糟糕。
这将帮助我减少内存使用量
您希望以这种方式管理多少个对象? 您确定内存使用会成问题吗?
欢迎其他选择这样做
实际上,这是您的两个选择。 您可以在内存中或磁盘上管理列表。 根据您的使用场景,您可以结合使用这两种方法。 例如,您可以将常用的对象保留在内存中,并将不常用的对象写出到磁盘上(这基本上是缓存)。
将数据存储在文件中比在RAM中存储要慢得多。
关于数据结构本身,如果通常使用所有ID,即向量通常具有空单元格,则std::vector
可能是最合适的方法。 但是,如果向量将有许多空单元格,则std::map
可能会为您提供更好的解决方案。 它将消耗更少的内存,并赋予O(logN)访问复杂性。
恕我直言,这里最重要的是数据集和平台的大小。 对于现代PC,处理成千上万个条目的内存中映射非常快,但是,如果您处理了千兆字节的数据,则最好将其存储在真实的磁盘数据库(例如MySQL)中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.