2012-06-11 21 views
8

क्या यह this तर्क के साथ विनाशक में कुछ फ़ंक्शन कॉल करने के लिए मान्य है? फ़ंक्शन पॉइंटर को स्टोर नहीं करता है, लेकिन पूर्ण-कार्यात्मक ऑब्जेक्ट मानता है।विनाशक में "यह" का उपयोग

+1

में यह this का उपयोग करने के लिए पूरी तरह से मान्य है। ऑब्जेक्ट डीटीओआर की अंतिम पंक्ति तक पूरी तरह मान्य है। बेशक अगर डीटीओआर ऑब्जेक्ट के टुकड़े (उदाहरण के लिए पीआरटी इत्यादि से बाहर निकलता है) तो आप अपने आप को पैर में शूटिंग कर रहे हैं, लेकिन पूरी तरह से आपका कोड है, न कि cpler उत्पन्न करता है ... –

उत्तर

14

this अभी भी विनाशक में मान्य है।

हालांकि, आपको यह ध्यान में रखना चाहिए कि आभासी फ़ंक्शन अब ठीक से काम नहीं कर सकते हैं क्योंकि आप ऑब्जेक्ट को नष्ट होने के बाद उम्मीद कर सकते हैं; उदाहरण देखें Never Call Virtual Functions during Construction or Destruction। अनिवार्य रूप से, वस्तु का गतिशील प्रकार संशोधित होता है क्योंकि प्रत्येक विनाशक पूरा होता है।

+4

वे ** ** ठीक से काम करो। यह सिर्फ सही काम करने वाले कार्यों की परिभाषा अलग है। मेरा मतलब है - वे डिजाइन के रूप में काम करते हैं। – valdo

+1

@ वाल्डो: उचित बिंदु! मैंने अपना जवाब संशोधित कर दिया है ... –

+2

या फिर भी, समिति की "ठीक से काम करने" की परिभाषा अभ्यास में बहुत उपयोगी नहीं है। मुझे यकीन है कि कुछ उपयोग-मामले का आविष्कार करना संभव है जहां आप आधार सीटीओआर/डीटीआर में वर्चुअल फ़ंक्शंस के बेस क्लास संस्करणों को कॉल करना चाहते हैं, और समिति के पास इस तरह का कुछ दिमाग था। अन्यथा वे कार्यान्वयन को अधिक स्वतंत्रता देते थे, और सिर्फ इतना कहा था कि यह कॉल करने के लिए यूबी है। यह शायद अधिक कुशल होगा, क्योंकि कार्यान्वयन को प्रत्येक ड्यूटी पूर्ण होने के रूप में vtable पॉइंटर (या समतुल्य) को समायोजित करना नहीं होगा। जैसा कि है, हम उस चीज़ के लिए भुगतान करते हैं जिसका हम उपयोग नहीं करते हैं। –

2

एक शब्द में: हाँ।
डी`TOR

संबंधित मुद्दे