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实例),以释放引用的图像数据。