2017-09-18 3 views
0

에서 QImage를 정리하는 방법.Qt는 : 취소 또는 <code>QIMage</code>에 const를 참조를 얻을 광산의 <a href="http://doc.qt.io/qt-5/qimage.html" rel="nofollow noreferrer">QIMage</a></p> <p>다음 방법을 정리하는 방법을 메모리

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 객체를 정리해야합니까?

주 :이 const & QImage 것을
참고. 그래서 대답은 비 const로 QImage을 주조해야할까요? 또한 데이터를 삭제하려면 QImageData 포인터를 얻으려고합니다. 확실한 접근 방법이 여기에 있는지 확실하지 않습니다. 좋습니다.

답변

2

const가 아닌 참조 또는 포인터가 필요합니다. 포인터를 사용하면 확실한 답을 얻을 수 있습니다. 참조를 사용하면 기본값 인 QImage이 할당됩니다. 같은 이미지를 참조 추가 QImage 인스턴스가있는 경우

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

    img = QImage(); 
} 

그러나,이 여전히 이미지가 차지하는 메모리를 정리하지 않을 수 있습니다. 이 장애물을 극복하려면 여러 개의 QImage 인스턴스가 동일한 이미지를 참조하지 않도록해야합니다. Qimage 인스턴스는 이와 관련하여 공유 포인터와 같습니다.

const-cast는 케이스에 디자인상의 결함이있는 것으로 간주됩니다. 나는 그것을 반대하는 것이 좋습니다.

+0

'const_cast'는 권장되지 않습니다. 그러나, 만약 내가'QImage copy = const_cast (img)'처럼 const_cast를한다면'copy = QImage()'를해라. ** 이것으로'img'을 정리할 수 있습니까? ** –

+0

shared_ptr을 사용하면 정리에 대해 걱정할 필요가 없습니까? –

+1

문제는 Qt가 QImage, QByteArray 등과 같은 많은 클래스에서 COW를 사용한다는 것입니다. 따라서 이들 중 하나를 복사하면 동일한 데이터에 대한 새로운 참조가 생성됩니다. 참조 된 이미지 데이터를 확보하려면 동일한 데이터 (즉, 동일한 이미지를 참조하는 모든 QImage 인스턴스)에 대한 모든 참조가 삭제되어야합니다. – user1095108

관련 문제

 관련 문제