ComPtr manuell freigeben

7

Ich verwende ComPtr (Microsoft :: WRL), um einige DirectX11-Ressourcen zu verwalten. Wie kann ich es manuell freigeben?

Die "ReleaseAndGetAddressOf" Methode, wenn ich richtig verstehe, befreit nur den Zeiger und nicht die Ressource selbst (die zurückgegeben wird), und ich bin mir nicht sicher über die "Reset" -Methode.

Die einzigen Alternativen, die ich mir vorstellen kann, sind das manuelle Aufrufen des Zeigerdestruktors oder das Abrufen des rohen Zeigers von "ReleaseAndGetAddressOf", der "Release" aufruft, was ich vermeiden möchte.

    
キキジキ 16.11.2012, 14:05
quelle

2 Antworten

16

Der Quellcode für WRL wird zur Verfügung gestellt, werfen Sie einen Blick auf include / winrt / wrl / client.h. Der eingebettete COM-Zeiger (ptr_ member) wird von der Funktion InternalRelease () freigegeben. Machen Sie eine der folgenden Möglichkeiten, um den Zeiger geeignete Kandidaten freizugeben:

  • der Destruktor. Der Grund, ComPtr & lt; & gt;
  • zu verwenden
  • Zuweisen von nullptr
  • mit ReleaseAndGetAddressOf (), der lange Weg
  • ruft Reset ()
  • auf

Wenn Sie also nullptr zuweisen oder Reset () aufrufen, sollten Sie sich entscheiden. Oder verwenden Sie es überhaupt nicht, wenn Sie nur den Schnittstellenzeiger selbst verwalten möchten, es ist sicherlich nicht erforderlich, ComPtr zu verwenden.

    
Hans Passant 16.11.2012, 14:49
quelle
3

Sie können einen Nullzeiger zuweisen.

    
Simon Richter 16.11.2012 14:27
quelle

Tags und Links