//Case 1:
QImage* tImg = new QImage("Some Image Here");
painter->drawImage(x, y, *tImg);
...
delete tImg;
//Case 2:
QImage* tImg = new QImage("Some Image Here");
{
QImage aImg(*tImg);
painter->drawImage(x, y, aImg);
}
...
delete tImg;
QImage неявно разделяют, когда что-то (как aImg
) получить «общую копию» исходных данных, что произойдет, если удалить исходные данные, будет aImg
по-прежнему сохраняют данные?Qt, неявный общий объект, что происходит при удалении?
А что произойдет с случаем 1, будет drawImage создать общую копию?
Будет ли возникнут какие-либо проблемы с функцией drawImage()? так как он принимает в качестве входного сигнала (const QImage & image). Можно ли удалить ссылку QImage после вызова drawImage()? – Nyaruko
'drawImage()' не будет изменять изображение, поэтому он останется ссылкой на общий ресурс. Нет проблем с его удалением, так как сама операция рисования копирует значения пикселей в целевое устройство рисования. Устройство рисования не будет ссылаться на данные изображения, но даже если бы оно и использовалось, и оно использовало CoW, данные оставались бы живыми до тех пор, пока это необходимо. – dtech
Является ли копия значений пикселей мгновенно? Если 'delete tImg' находится в другом потоке (но я использую мьютекс, чтобы убедиться, что' delete tImg' вызывается после вызова 'drawImage()'), будет ли он по-прежнему безопасным? – Nyaruko