Keine Referenzzählung einsetzen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Speicherverwaltung für Schnittstellenobjekte


Wenn es sich bei dem Objekt um eine Komponente oder ein Steuerelement handelt, das einer anderen Komponente gehört, unterliegt dieses Objekt einem anderen Speicherverwaltungssystem, das auf TComponent basiert. Obwohl manche Klassen den Objektreferenzverwaltungsansatz von TComponent und die Schnittstellenreferenzzählung kombinieren, ist es recht schwierig, dies korrekt zu implementieren.

Zur Entwicklung einer Komponente, die Schnittstellen unterstützt, aber die Schnittstellenreferenzzählung umgeht, müssen Sie die Methoden _AddRef und _Release, wie im folgenden Beispiel gezeigt, implementieren:

function TMyObject._AddRef: Integer;
begin
  Result := -1;
end;
function TMyObject._Release: Integer;
begin
  Result := -1;
end;

Auch in diesem Fall kann QueryInterface implementiert werden, um die dynamische Abfrage für das Objekt zu ermöglichen.

Da Sie QueryInterface implementieren, können Sie weiterhin den Operator as für die Schnittstellen von Komponenten verwenden, sofern Sie einen Schnittstellenbezeichner (IID) erstellen. Sie können zudem die Aggregation einsetzen. Handelt es sich bei dem äußeren Objekt um eine Komponente, dann implementiert das innere Objekt die übliche Referenzzählung, indem es an das "Controlling Unknown" delegiert. Auf der Ebene des äußeren Objekts wird die Entscheidung getroffen, die Methoden _AddRef und _Release zu umgehen und einen anderen Ansatz zur Speicherverwaltung zu verfolgen. Sie können TInterfacedObject sogar als Basisklasse für ein inneres Objekt einer Aggregation verwenden, deren umschließendes äußeres Objekt nicht die Schnittstellenreferenzzählung einsetzt.

Anmerkung:  Mit "Controlling Unknown" ist die Schnittstelle IUnknown gemeint, die vom äußeren Objekt implementiert wird und über die der Referenzzähler für das gesamte Objekt verwaltet wird. IUnknown ist gleichbedeutend mit IInterface, wird jedoch stattdessen in COM-basierten Anwendungen verwendet (nur für reine Windows-Anwendungen). Nähere Informationen über die Unterschiede zwischen den verschiedenen Implementierungen von IUnknown oder IInterface seitens innerer und äußerer Objekte finden Sie unter Aggregation, sowie in der Microsoft Online-Hilfe unter dem Stichwort "Controlling Unknown".

Siehe auch