Verwenden von Generics zum Erstellen eines verknüpften Objekts

8

Ich habe eine Funktion geschrieben, die einen Klassentyp (T) und einen Schnittstellentyp (I) akzeptiert und eine Schnittstelle (I) an das Objekt (T) zurückgibt. Hier ist der Code.

%Vor%

...

%Vor%

Die Funktion funktioniert wie erwartet ohne Speicherlecks oder andere unerwünschte Effekte.

Gibt es andere Möglichkeiten, um das gleiche Ergebnis zu erzielen?

    
norgepaul 18.03.2015, 09:58
quelle

1 Antwort

14

Es gibt einen Fehler in diesem Code. Supports zerstören Ihre Objektinstanz, wenn sie IUnknown unterstützt, aber nicht die gewünschte Schnittstelle.

Einfache Demonstration:

%Vor%

Am besten fügen Sie IInterface oder IUnknown als zusätzliche Einschränkung zu T hinzu.

Oder stellen Sie sicher, dass Sie eine bereits zerstörte Instanz nicht zerstören.

Wenn Sie nicht dynamische QueryInterface -Implementierungen unterstützen wollen (wo die Klasse die Schnittstelle nicht implementiert, aber QueryInterface sie zurückgibt), würde ich mit einem Supports -Aufruf für die Klasse gehen:

%Vor%     
Stefan Glienke 18.03.2015, 10:21
quelle