ich durch einige älteren C++ Code mit dem Windows Imaging Component Bibliothek zu tun zu gehen und ich beobachtete dies:Übergabe einen CComPtr auf eine Funktion mit einem rohen Zeiger Prototyp
void setProperties(IPropertyBag2* const pBag)
{
pBag->Write(...);
}
void other_function()
{
CComPtr<IPropertyBag2> pBag;
//Code to initialize pBag
setProperties(pBag);
}
Die setProperties
Methode schreibt einfach ein Bündel von Eigenschaften der Eigenschaft Tasche. Der Code kompiliert und läuft gut, weil ich denke, dass es den entsprechenden Typcasting-Operator aufruft.
Meine Frage ist, ob eine solche Schnittstelle empfohlen wird oder gibt es eine bessere Möglichkeit, den Zeiger zu übergeben. Zum Beispiel gibt es einen Unterschied (in Bezug auf die Sicherheit/Leistung), wenn die Signatur geändert wurde:
void setProperties(const CComPtr<IPropertyBag2>& pBag)
Die Verwendung eines CComPtr-Parameters bindet Sie nicht immer an CComPtr, da CComPtr-Konstruktoren nicht explizit sind. Und rohe Schnittstellenzeiger sind keine intelligenten Zeiger. Das Vergessen eines Objekts wird zu einem Leck führen. Es hat alle die gleichen Probleme wie das Vergessen, Speicher zu löschen, der mit "neu" zugewiesen wurde. – user1610015