उदाहरण मैंने देखा है COM IUnknown::Release()
समारोह कार्यान्वयन से ऐसा ही कुछ है:COM IU अज्ञात :: रिलीज कार्य का यह कार्यान्वयन क्यों करता है?
ULONG Release()
{
InterlockedDecrement(&m_count);
if(m_count == 0) {
delete this;
}
return m_count;
}
तो, अगर m_count 0 है, इसलिए हम हटा रहे हैं, "इस" वस्तु, और रेफरी गिनती लौटने। जो मुझे समझ में नहीं आता है वह क्यों काम करता है?!?
वस्तु को हटाया जा रहा कॉल स्टैक को बर्बाद नहीं होगा या यह ठीक है क्योंकि यह धागा द्वारा आयोजित किया जा रहा है, इसलिए यह वस्तु के साथ कोई संबंध नहीं है है ???
यदि ऑब्जेक्ट हटा दिया गया है, तो यह कैसे संभव है कि हम m_count वापस कर सकें, इसे हटा दिया जाना चाहिए था। मैं खुद को आश्वस्त कर सकता था कि यह ठीक है अगर हटाए जाने के बाद कोड हार्ड-कोड 0 लौटाएगा, लेकिन यह सदस्य कैसे वापस आ सकता है?!?
आपकी मदद के लिए बहुत बहुत धन्यवाद! :-)
+1 आप सही हैं - या तो यह छोटी गाड़ी कोड है या यहाँ काम पर कुछ और नीच है। मैं उत्सुक हूं अगर COM के साथ अधिक अनुभव वाला कोई व्यक्ति इसका उत्तर दे सकता है, लेकिन मेरा गॉटशॉट यह है कि यह गलत है। – templatetypedef