4

Qtクラスには、基になる画像データへのポインターを返すQImage2つのバージョンの関数があります。bits()1つはconstで、もう1つはそうではありません。非constバージョンのドキュメントは次のとおりです。

最初のピクセルデータへのポインタを返します。これはscanLine(0)と同等です。

QImageは暗黙的なデータ共有を使用することに注意してください。この関数は、共有ピクセルデータのディープコピーを実行するため、現在の戻り値を使用するのはこのQImageだけです。

戻りタイプはuchar*です。

deleteこれは、メモリリークを回避するために、このポインタを使い終わったときに、このポインタを呼び出す責任があることを意味しますか?

4

1 に答える 1

6

いいえ、それは、非constバージョンが原因で、QImageが同じデータを共有する他のインスタンスから切り離されることを意味します。これは、QImageを変更しようとしている可能性があるためです。それはまだ所有権を維持します。念のために言っておきますが、実装(Qt 4.7.2以降):

uchar *QImage::bits()
{
    if (!d)
        return 0;
    detach();
    // In case detach ran out of memory...
    if (!d)
        return 0;
    return d->data;
}
于 2013-02-14T16:06:21.263 に答える