表示: Delphi
C++
表示設定
参照カウントを使わない
提供:RAD Studio XE2
別のコンポーネントが所有するコンポーネントまたはコントロールがオブジェクトの場合,そのオブジェクトは TComponent に基づいた別のメモリ管理システムの一部です。一部のクラスでは,TComponent コンポーネントとインターフェース参照カウントのオブジェクト存続期間管理の方法を混用していますが,これは正しく実装するのに注意を要します。
インターフェースをサポートしますが,インターフェース参照カウントメカニズムを回避するコンポーネントを作成するには,次のように _AddRef メソッドと _Release メソッドをコードに実装する必要があります。
function TMyObject._AddRef: Integer; begin Result := -1; end; function TMyObject._Release: Integer; begin Result := -1; end;
ここでも通常どおりに QueryInterface を実装して,オブジェクトで動的問い合わせをできるようにすることも可能です。
QueryInterface を実装するので,インターフェース識別子(IID)が用意されている場合は,インターフェースに対して as 演算子を使用できることに注意してください。集約を使用することもできます。外部オブジェクトがコンポーネントの場合は,「制御側の Unknown」への委任により,内部オブジェクトは通常どおりに参照カウントを実装します。AddRef メソッドと _Release メソッドを回避して,別の方法でメモリ管理を処理することを決めるのは,外部オブジェクトのレベルです。実際には,親の外部オブジェクトとしてコンポーネントを持つ集約やインターフェース存続期間モデルにしたがっていない集約の内部オブジェクトの基本クラスとして TInterfacedObject を使用できます。
メモ: 「制御側の Unknown」は外部オブジェクトによって実装される IUnknown で,オブジェクト全体の参照カウントが保持されます。IUnknown は IInterface と同じですが,COM ベースのアプリケーションでは IInterface でなく IUnknown が使用されます。外部オブジェクトと内部オブジェクトによる IUnknown インターフェースまたは IInterface インターフェースのさまざまな実装を区別する情報についての詳細は,集約と Microsoft のオンラインヘルプを参照してください。