【问题标题】:boost shared_ptr get owner countboost shared_ptr 获取所有者计数
【发布时间】:2011-09-21 12:36:56
【问题描述】:

我正在使用 boost::shared_ptr 来存储指向纹理的指针。我正在根据需要加载新纹理并使用 shared_ptr 在程序之间共享它们。如果我的应用程序使用了太多内存,我想删除未使用的纹理以清除内存。有没有办法可以确定有多少对象可以通过 shared_ptr 访问纹理?

【问题讨论】:

    标签: c++ boost shared-ptr


    【解决方案1】:

    如果它未被使用,那么shared_ptr 将自动释放它。这就是shared_ptr 的意义所在。如果您将 shared_ptr 保存在纹理上而没有实际使用它,那么您就违反了 shared_ptr 的合同并且不应该使用它。

    【讨论】:

    • 所有纹理都由 ResourceManager 通过 shared_ptr 保存。程序的任何其他部分都可以通过此管理器访问纹理。在收到内存警告之前,我不想删除纹理。在这种情况下,我想删除未使用的纹理(仅由资源管理器持有)
    • @Andrew:你看过 boost.weak_ptr 或 boost.intrusive_ptr 吗?
    • @Andrew:删除 ResourceManager 并让 shared_ptr 处理它会更容易。
    【解决方案2】:

    您可以使用shared_ptr::use_count(),但在使用之前请阅读文档!

    【讨论】:

      【解决方案3】:

      use_count(),但请注意,正如文档所说,它不一定太高效。

      【讨论】:

        【解决方案4】:

        shared_ptr 类具有成员函数 use_count()unique(),可让您访问其使用次数。

        不过,这些信息对您有什么用处是另一个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-27
          • 1970-01-01
          • 1970-01-01
          • 2010-09-13
          • 2012-10-31
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          相关资源
          最近更新 更多