在這個問題中,我想知道維護與QImage對象關聯的外部緩衝區對象的生命的最佳實踐。當我們可以從中構建QImage並且可能淺拷貝時,我們何時可以刪除一個幀緩衝區?
背景
我開發與QT未壓縮的圖像文件瀏覽器。它從文件讀取YV12數據,將其轉換爲RGB幀緩衝區,構建QImage對象,並將其傳遞到UI層以進行渲染。
的YV12文件閱讀器看起來是這樣的。
class YV12Frame
{
public:
YV12Frame(std::string const& fileName)
{
// Initialize m_frameBuffer
// ... (Omitted for brevity)
}
QImage GetQImage()
{
// Build QImage object
return QImage(m_frameBuffer, WIDTH, HEIGHT, QImage::Format_RGB32);
}
private:
unsigned char m_frameBuffer[WIDTH * HEIGHT * 4];
};
由於QT文件說,我們需要保持YV12Frame對象QImage的整個對象的生命週期有效。
的UI層可以或者通過淺或深拷貝複製QImage的對象。換句話說,可能存在未知數量的一次引用幀緩衝區的QImage對象。
問題
我們怎麼知道何時刪除YV12Frame對象安全?
預期的答案
有一個通知(回調或其他)告訴「嘿,我是最後的QImage對象指的是幀緩衝器和我即將被刪除。您可以安全地刪除現在幀緩衝區。「
但是,我找不到這樣的通知。