Bonjour
Je d�vellope depuis peu en utilisant la technologie COM. J'ai d�couvert r�cemment la possibilit� d'utiliser des wrappers avec gestion d'erreurs de haut niveau et les smart pointers de visual c++ (j'utilisait les CComPtr ATL pr�c�demment).
Cependant je ne comprend pas pourquoi les _com_ptr_t ne font pas de AddRef de trop quand on les assignent avec l'op�rateur =.
Ainsi auparavant je r�alisais ceci :
Dans ce cas l'appel � GetSubObject r�alisait un increment de reference (comme toutes les m�thodes d'API retournant une interface). L'op�rateur & de CComPtr m'assurait qu'il en r�alisait pas d'autres AddRef. l'appel � Release �tait automatique en fin de port�e.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 //on suppose que aPtr est un pointeur initialisé sur un autre objet d'une API CComPtr<IB> bPtr aPtr->GetSubObject(&bPtr);
Avec les _com_ptr_t et wrapper de m�thodes :
Le probl�me c'est que au cours de l'appel � l'op�rateur =, un addRef est effectu� (j'ai v�rifi� en Debug). Or le compteur de r�f�rence se trouve � 1 apr�s cette ligne. Il devrais �tre � 2 (AddRef par l'api plus AddRef dans l'op�rateur =).
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 IBPtr bPtr; bPtr= aPtr->GetSubObject();
Ca marche c'est cool, mais je voudrais savoir pourquoi (release dans le wrapper ?), et �tre sur que ca marche.
Merci d'avance
Partager