KOMリファレンスカウンティングは、所有するオブジェクトを "高速"にするのに使用するべきでしょう。 これは、リファレンスにサーバオブジェクト上の振る舞いを直接カウントさせることによって、 オブジェクトのライフサイクルを直接操作できるようになります。 つまり CORBA リファレンスカウンタとは対照的です。 CORBA リファレンスカウンタは、遠隔オブジェクトの場合には、リファレンスカウンタはスタブオブジェクトに従って動作します。(これはローカルオブジェクトの違いです。この場合、スタブ = サーバオブジェクトです。) KOMリファレンスカウンタがゼロに落ちると、オブジェクトは破壊されます。 この崩壊は、他のオブジェクトへの全てのコネクションを閉じ、関連性は残すcleanUp()を呼ぶことによってなされます。 このコールが終了した後、オブジェクトは本当にリリースされます。 cleanUp()メソッドの再実装が必要かもしれません。 この場合は、以下の2つのことを忘れないでください:
ブール変数m_bIsCleanが falseの時のみ実行、 そうでなかれば単にリターンします。
以前の実装を確実に呼んでください !
このKOMリファレンス関係の概要として心に留めておいてほしいことは、リファレンスをオブジェクトに保たせておく方法が以下の3つあるということです:
シグナル/スロット、もしくはイベントフィルタを通してオブジェクトに接続する。
親オブジェクトである。つまりKOMリファレンスカウンタでリファレンスを保持します。
さもなければ、adopting を使用すべきでしょう。そうすれば、オブジェクトがその機能を失った、つまり上記にあげたどの種別に当てはまらないオブジェクトへの全リファレンスを解放した際の情報を得られます。 この考えの背景は、オブジェクト間の全コネクション/リファレンスが対称的ということです。 つまり、両者がコネクションについていっており、 一方がその機能を失ったときは常に両者が、全コネクションを切断します。 シグナル/スロットコネクションの場合、これは KOMで自動的に行われます。 KOMリファレンスカウンタの場合、オブジェクトのライフサイクルを直接操作することができます。3つ目の方法としてAdoptingは、シグナル/スロットコネクションでもKOMリファレンスカウンタ経由の直接リファレンスでもない、その他の対称的なコネクションを維持するために使われます。
ヒント:KOMVarテンプレートを使用するとKOMリファレンスを操作するのがより簡単になります。このリファレンスはCORBA _var形式と同じように使用することができます。