2008-09-17 14 views
8

मान लीजिए कि मेरे पास एक क्लास मॉड्यूल clsMyClass एक सदस्य चर के रूप में ऑब्जेक्ट के साथ है। नीचे सूचीबद्ध इस बहुत ही सरल वर्ग के दो पूर्ण कार्यान्वयन हैं।यह वीबी 6 सदस्य चर कब नष्ट हो गया है?

कार्यान्वयन 1:

Dim oObj As New clsObject 

कार्यान्वयन 2:

Dim oObj As clsObject 

Private Sub Class_Initialize() 
    Set oObj = New clsObject 
End Sub 

Private Sub Class_Terminate() 
    Set oObj = Nothing 
End Sub 

वहाँ इन दोनों के बीच किसी भी कार्यात्मक अंतर है? विशेष रूप से, oObj का जीवनकाल वही है?

उत्तर

5

कार्यान्वयन में 1 clsObject तब तक तत्काल नहीं किया जाएगा जब तक इसका उपयोग नहीं किया जाता है। यदि इसका कभी भी उपयोग नहीं किया जाता है, तो clsObject.Class_Initialize ईवेंट कभी भी आग नहीं लगेगा।

कार्यान्वयन 2 में, clsObject उदाहरण उसी समय बनाया जाएगा जब clsMyClass को तत्काल किया जाता है। ClsObject.Class_Initialize हमेशा clsMyClass बनाया गया है तो निष्पादित किया जाएगा।

+3

यह भी ध्यान दें कि कार्यान्वयन 1 कार्यान्वयन 2 से भी बदतर होगा क्योंकि संकलक प्रत्येक बार ओओबीजे तक पहुंचने पर चेक जोड़ देगा – rpetrich

0

यदि कार्यान्वयन में 1 घोषणा कक्षा के अंदर है और उप नहीं है, तो दोनों उदाहरणों के लिए दायरा समान है।

0

ऑब्जेक्ट वेरिएबल नष्ट हो जाएगा जब भी कचरा संग्रह निर्धारित करता है कि कहा गया ऑब्जेक्ट का कोई और संदर्भ नहीं है। तो आपके दो उदाहरणों में, clsObject का दायरा मानना ​​वही है, जब आपकी वस्तु नष्ट हो जाएगी तो इसमें कोई अंतर नहीं है।

+2

हम वीबी 6 के बारे में बात कर रहे हैं, कोई कचरा संग्रह नहीं है। यह संदर्भ गिनती की दुनिया है। –

+0

सही, संदर्भ गिनती एल्गोरिदम VB6 स्मृति को साफ़ करने के लिए उपयोग करती है, जिसे आमतौर पर "कचरा संग्रह" कहा जाता है। https://en.wikipedia.org/wiki/Reference_counting – Rick