क्या इंटरफेस को आभासी विनाशक की आवश्यकता है, या ऑटो-जनरेटेड एक जुर्माना है? उदाहरण के लिए, निम्नलिखित दो कोड स्निपेट्स में से कौन सा सर्वोत्तम है, और क्यों? कृपया ध्यान दें कि ये पूरी कक्षा है। जावा-स्पीच में कोई अन्य विधियां, चर, इत्यादि नहीं हैं, यह एक "इंटरफ़ेस" है।इंटरफेस के लिए वर्चुअल विनाशक
class Base
{
public:
virtual void foo() = 0;
virtual ~Base() {}
};
या ...
class Base
{
public:
virtual void foo() = 0;
~Base() {} // This line can be omitted, but included for clarity.
};
संपादित कारण जवाब "नहीं हैं कि क्या मैं तलाश कर रहा हूँ" के लिए:
प्रत्येक मार्ग के परिणाम हैं वास्तव में क्या। कृपया अस्पष्ट उत्तर न दें जैसे "यह ठीक से नष्ट नहीं किया जाएगा"। कृपया मुझे बताएं कि वास्तव में क्या होगा। मैं एक असेंबली बेवकूफ हूँ।
संपादित करें 2:
मुझे अच्छी तरह पता है कि "आभासी" टैग का मतलब है कि नाशक अगर व्युत्पन्न के सूचक के माध्यम से नष्ट कर दिया बुलाया नहीं होता है, लेकिन (मुझे लगता है कि) इस सवाल अंततः नीचे फोड़े हूँ "क्या यह विनाशक को छोड़ना सुरक्षित है, क्योंकि यह वास्तव में तुच्छ है?"
संपादित करें 3:
मेरी दूसरी संपादित सिर्फ सादा गलत और दुष्प्रचार है। अधिक जानकारी के लिए कृपया वास्तविक स्मार्ट लोगों द्वारा टिप्पणियां पढ़ें।
आपको वर्चुअल रिवर्सड, की तरह की परिभाषा मिली है। आभासी टैग का मतलब यह नहीं है कि मूल विनाशक को पॉइंटर के माध्यम से हटाए जाने पर बुलाया नहीं जाएगा - यह हमेशा होता है। इसके बजाए, वर्चुअल टैग का अर्थ है कि * व्युत्पन्न * विनाशक को कॉल किया जाएगा यदि आप ऑब्जेक्ट को * बेस * क्लास प्रकार के पॉइंटर के माध्यम से हटा देते हैं। –
@ जोर्डन: हे भगवान, मुझे लगता है कि आप सही हैं। –
"मैं एक असेंबली बेवकूफ हूँ"। यह दुर्भाग्यपूर्ण है, क्योंकि सी ++ असेंबली पैदा करने के बारे में कुछ भी नहीं कहता है। यदि आप देखना चाहते हैं कि एक विशेष कंपाइलर इसे कैसे संभालता है, तो कुछ कोड संकलित करें और आउटपुट देखें। और -1 बस अपने दृष्टिकोण के लिए; एक प्रश्न मत पूछें और सभी उत्तरदाताओं को बताएं कि "आपको इसे पीछे की ओर मिला है" और उन्हें कम करें। आप किसी कारण से एक प्रश्न पूछ रहे हैं, है ना? – GManNickG