Qtの基本


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Implicit Sharing

概要

Qtの多くのクラスでは大きなリソースを最小のコピーで済むようにするため、implicit data sharing を利用しています。

仕組み

クラスのメンバ変数はデータに対するポインタのみからなります。
クラスのコピーを行う場合にコピーされるのはポインタだけなので、非常に高速に動作します。
ポインタの参照先のデータには参照数をカウントしており、最初にデータが生成されたとき1、その後コピーなどが行われた場合参照数を+1していきます。逆に参照していたオブジェクトが破棄された場合は参照数が-1されます。
参照数が0になると、参照しているオブジェクトが存在しないということなのでデータの実体は破棄されます。
以上の仕組みにより通常はコピーしたオブジェクトに変更を加えると、コピー元のオブジェクトも変更されることになります。