Qt:如何从内存中清除QImage

Qt:如何从内存中清除QImage,qt,qml,qtquick2,qimage,qtquickcontrols2,Qt,Qml,Qtquick2,Qimage,Qtquickcontrols2,如何清除或清理垃圾 我的以下方法得到一个QIMage的常量引用 MyMethod(const QImage & img) { // save it to a file img.save("/path/to/save/the/qimage"); // now I want to clan up img from memory. How should I do it? } 问题: 使用后如何从内存中清除QImage对象 注意: 请注意,它是一个常量&QImage。所以,答

如何清除或清理垃圾

我的以下方法得到一个
QIMage
的常量引用

MyMethod(const QImage & img) {

  // save it to a file
  img.save("/path/to/save/the/qimage");

  // now I want to clan up img from memory. How should I do it? 
}
问题:
使用后如何从内存中清除
QImage
对象

注意:
请注意,它是一个
常量&QImage
。所以,答案将涉及将
QImage
转换为非常量?
另外,我正在尝试获取指向数据的
QImageData
指针并将其删除。不确定这是否是正确的方法。建议。

您需要一个非常量引用或指针。有了指针,答案是显而易见的。对于引用,您只需为其指定一个默认构造的
QImage

MyMethod(QImage & img) {
  img.save("/path/to/save/the/qimage");

  img = QImage();
}
但是,如果有其他引用同一图像的
QImage
实例,这可能仍然无法清理该图像占用的内存。要克服这一障碍,您需要避免引用同一图像的多个
QImage
实例。在这方面,
Qimage
实例就像一个共享指针


const cast将被视为揭示您案例中的设计缺陷。我建议你不要这样做。

要明白,不鼓励使用
const\u cast
。但是,如果我像这样进行常量转换,那么就执行
copy=QImage()
。这个清理会不会清理
img
?如果我使用共享的ptr,那么我就不必担心清理了?问题是Qt在它的许多类上使用COW,比如QImage、QByteArray等等。。。因此,当您复制其中任何一个数据时,只需为相同的数据创建一个新引用。您需要确保销毁对相同数据的所有引用(即引用相同图像的所有QImage实例),以释放引用的图像数据。