Da esempi che ho visto COM IUnknown::Release()
implementazione della funzione è qualcosa di simile:Perché questa implementazione di COM IUnknown :: Release funziona?
ULONG Release()
{
InterlockedDecrement(&m_count);
if(m_count == 0) {
delete this;
}
return m_count;
}
Quindi, se m_count è 0, quindi stiamo cancellando "questo" oggetto, e restituendo il conteggio ref. Quello che non capisco è perché funziona?!?!
eliminazione l'oggetto non avrebbe rovinato lo stack di chiamata o è bene perché è detenuta dal filo, quindi non ha nulla a che fare con l'oggetto ???
Se l'oggetto è stato eliminato, come è possibile che possiamo restituire m_count, avrebbe dovuto essere eliminato. Avrei potuto convincermi che va bene se dopo l'eliminazione il codice restituisse lo 0 codificato, ma come mai può restituire il membro?!?!
Grazie mille per il vostro aiuto! :-)
+1 Hai ragione - o si tratta di un codice bacato o ci sono alcune più sfumature al lavoro qui. Sono curioso di sapere se qualcuno con più esperienza con COM può rispondere a questo, ma il mio gutshot è che questo è completamente sbagliato. – templatetypedef