微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我想从对象中保留一些数据而不是全部数据时,如何管理内存?

如何解决当我想从对象中保留一些数据而不是全部数据时,如何管理内存?

我对 C++ 的内存管理没有经验。我有一个 Magick::Image 类,用于保存大图像 (400MB),并且一次加载的图像位图永远不会超过一个。我确实想要加载许多包含元数据的对象,例如分辨率、位深度和其他与图像相关的小信息,我希望能够以某种方式检索位图数据(或指向位图数据的指针)来自这些对象内的调用

我的解决方案是有一个 ImageFile 类来保存元数据和一个指向位图的指针,还有 load()unload() 方法可以让我加载和卸载位图数据.然后我可以拥有许多带有元数据的对象,当我需要其中任何一个的位图时,我可以调用 load(),完成后我可以调用 unload()

不幸的是,这给我带来了一个问题:可以将 ImageFile 指针传递给函数并在它处于卸载状态时访问它的位图。在这种情况下,我可以 (1) 抛出异常或 (2) 我可以自动加载图像。由于以下原因,这两种方法对我来说都不好:

  1. 在我看来,从哲学上讲,如果您有某个类的实例,那么该实例应该始终处于功能/工作状态。拥有可能处于非工作状态的实例似乎需要添加额外的代码和检查并增加程序的复杂性。我可能在这里弄错了。
  2. 如果我在调用需要位图的方法自动加载图像,那么我什么时候卸载?对象无法知道位图是否会很快再次使用,因此无法自动完成(可以吗?)。似乎每次都需要手动取消加载,此时自动加载毫无意义,因为无论如何我们都必须进行手动工作。

出于这些原因,我相信我的 ImageFile 解决方案是一种糟糕的做法。我如何以更强大的方式实现我需要的东西?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。