Implicit Sharing
概要
Qtの多くのクラスでは大きなリソースを最小のコピーで済むようにするため、implicit data sharing を利用しています。
仕組み
クラスのメンバ変数はデータに対するポインタのみからなります。
クラスのコピーを行う場合にコピーされるのはポインタだけなので、非常に高速に動作します。
ポインタの参照先のデータには参照数をカウントしており、最初にデータが生成されたとき1、その後コピーなどが行われた場合参照数を+1していきます。逆に参照していたオブジェクトが破棄された場合は参照数が-1されます。
参照数が0になると、参照しているオブジェクトが存在しないということなのでデータの実体は破棄されます。
以上の仕組みにより通常はコピーしたオブジェクトに変更を加えると、コピー元のオブジェクトも変更されることになります。
最終更新:2014年08月19日 00:11