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 :

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);
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.

Avec les _com_ptr_t et wrapper de m�thodes :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
IBPtr bPtr;
bPtr= aPtr->GetSubObject();
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 =).

Ca marche c'est cool, mais je voudrais savoir pourquoi (release dans le wrapper ?), et �tre sur que ca marche.

Merci d'avance