De ejemplos que he visto COM IUnknown::Release()
implementación de la función es algo así:¿Por qué funciona esta implementación de COM IUnknown :: Release?
ULONG Release()
{
InterlockedDecrement(&m_count);
if(m_count == 0) {
delete this;
}
return m_count;
}
lo tanto, si m_count es 0, por lo que estamos eliminando objeto "this", y devolver el recuento de ref. Lo que no entiendo es por qué funciona?!?!
eliminar el objeto no arruinaría la pila de llamadas o ¿es correcto porque está siendo realizado por el flujo, por lo que no tiene nada que ver con el objeto ???
Si el objeto se ha eliminado, ¿cómo es posible que podamos devolver m_count, debería haberse eliminado? Podría haberme convencido a mí mismo de que está bien si después de la eliminación, el código devuelve un código fijo de 0, pero ¿cómo puede devolver el miembro?!?!
¡Muchas gracias por su ayuda! :-)
+1 Tienes razón, o bien es un código defectuoso o hay algo más matizado en el trabajo aquí. Tengo curiosidad si alguien con más experiencia con COM puede responder a esto, pero mi punto culminante es que esto es totalmente erróneo. – templatetypedef