नहीं, स्थिति पर निर्भर करता है, कभी-कभी यह वैध और अच्छा डिजाइन होता है।
यह समझने के लिए कि आपको क्यों और कब विध्वंसक रूप से कॉल करने की आवश्यकता है, आइए देखें कि "नया" और "हटाएं" के साथ क्या हो रहा है।
एक वस्तु को गतिशील रूप से बनाने के लिए, T* t = new T;
हुड के नीचे: 1. आकार (टी) मेमोरी आवंटित की जाती है। 2. आवंटित मेमोरी को आरंभीकृत करने के लिए T के कंस्ट्रक्टर को कहा जाता है। ऑपरेटर नया दो काम करता है: आवंटन और आरंभीकरण।
delete t;
हुड के तहत वस्तु को नष्ट करने के लिए : 1. टी का विनाशकर्ता कहा जाता है। 2. उस ऑब्जेक्ट के लिए आवंटित मेमोरी जारी की जाती है। ऑपरेटर डिलीट भी दो काम करता है: विनाश और डीलक्लोशन।
एक निर्माणकर्ता को आरंभीकरण करने के लिए लिखता है, और विनाश करने के लिए विध्वंसक। जब आप स्पष्ट रूप से विध्वंसक को बुलाते हैं, तो केवल विनाश होता है, लेकिन निपटारा नहीं ।
स्पष्ट रूप से विध्वंसक कॉलिंग का एक वैध उपयोग, इसलिए, हो सकता है "मैं केवल ऑब्जेक्ट को नष्ट करना चाहता हूं, लेकिन मैं मेमोरी आवंटन (अभी तक) जारी नहीं करता (या नहीं कर सकता)।"
इसका एक सामान्य उदाहरण, कुछ वस्तुओं के पूल के लिए पूर्व-आवंटित मेमोरी है, जिसे अन्यथा गतिशील रूप से आवंटित किया जाना है।
एक नई वस्तु बनाते समय, आप पूर्व-आवंटित पूल से मेमोरी का हिस्सा प्राप्त करते हैं और "प्लेसमेंट नया" करते हैं। ऑब्जेक्ट के साथ किए जाने के बाद, आप सफाई कार्य को समाप्त करने के लिए विध्वंसक को स्पष्ट रूप से कॉल करना चाह सकते हैं, यदि कोई हो। लेकिन आप वास्तव में मेमोरी को नहीं हटाएंगे, क्योंकि ऑपरेटर डिलीट कर चुका होगा। इसके बजाय, आप पुन: उपयोग के लिए पूल में चंक को लौटाते हैं।