代码之家  ›  专栏  ›  技术社区  ›  AndreasT

qt4.5:隐式共享qImage:是像.bits()这样的方法始终在复制(文档不清晰)

  •  2
  • AndreasT  · 技术社区  · 15 年前

    我正在编写一个必须处理大qimage的qt应用程序。 qimage使用隐式共享,这意味着它引用计数一个内部数据指针。每当refcount为>1时,对象将计数为“共享”,并且任何可能的数据修改调用都会发出图像数据的深度副本。

    简言之:我不希望发生深度复制。

    我做了很多调用,比如setPixel()、bits()等,可以触发一个副本。文档有时读起来就像某些调用 总是 即使我尽力将refcount保持在1,也会触发深度复制(分离调用)。 像这里: QImage::setPixel()

    所以我想知道:

    1. Doc的公式化是否有点笨拙,而这些调用是否只是可靠地复制 共享 对象(如refcount>1中所述)?
    2. 出于调试等原因,我可以问一个对象当前的refcount是什么吗?
    3. 我能不能强迫qt不隐式地共享特定的对象/实例(<-在这里,我有经验的猜测是“否”)。
    1 回复  |  直到 15 年前
        1
  •  1
  •   rpg    15 年前
    1. 可以修改共享实例的操作将分离。设置像素分离。
    2. 尝试qimage::isdetached(),它执行 return d && d->ref == 1; . 通过使用调试器,可以获得实际的引用计数。
    3. 除了通过引用/共享指针编号传递。