2009/03/08

Qtの暗黙の共有


暗黙の共有により、Qtのクラスは、コピーに対して変更を加えない限り実際のコピーが行われないことが保障されます。暗黙の共有を最大限に生かすためには、少しばかり従来とは異なるプログラミング作法が必要となります。constでないベクタやリストに対して読み込みのみのアクセスを行う場合、[]演算子ではなくat()関数を使います。[]演算子によってアクセスすると、Qtのコンテナは、その値が左辺値か右辺値かを判別できないため、どちらで使われてもよいようにコピーを行います。しかしat()の帰り値は左辺値となれないので、深いコピーを行わないのです。
STLスタイルのイテレータでも同じ問題が生じます。constでないコンテナのbegin()やend()を呼び出すと、Qtはコンテナが共有されていた場合強制的に深いコピーを実行します。こうした非効率を避けるには、可能な限りconst_iteratorとconstBegin()、constEnd()を使います。



めもめも。

0 件のコメント: