मैं इस तरह परिभाषित विभिन्न संरचनाओं के साथ कुछ सी ++ कोड प्राप्त किया है:क्या यह सी ++ विनाशक अनावश्यक है?
typedef struct _someStruct_ {
std::string someString;
std::vector<std::string> someVectorOfStrings;
int someOtherStuff;
~_someStruct_()
{
someString.clear();
someVectorOfStrings.clear();
}
} someStruct;
नाशक यहां पूरी तरह से बेमानी है - अगर संरचना डिफ़ॉल्ट नाशक से विलुप्त किया जाए, तो नहीं होगा किसी भी तार, वैक्टर, आदि वैसे भी नष्ट हो?
अगर मैं कोड लिखूंगा, तो मैंने यहां एक स्पष्ट विनाशक जोड़ने का विचार नहीं किया होगा - मैं बस संकलक को इसके साथ आने दूंगा।
जैसा कि मैं इसे समझता हूं, केवल एक बार जब आप संरचना में अपना स्वयं का विनाशक बनाने की आवश्यकता हो सकती है, तो संरचनाओं के किसी भी सदस्य को डेटा को पॉइंटर्स होते हैं जिन्हें सफाई की आवश्यकता हो सकती है, या यदि कुछ अतिरिक्त कार्यक्षमता (उदाहरण के लिए डिबगिंग, जब कोई संरचना हटा दी जाती है तो लॉगिंग) की आवश्यकता होती है।
क्या मुझे यहां कुछ याद आ रहा है - क्या कोई कारण है कि स्ट्रिंग और वैक्टर को विनाशक में स्पष्ट रूप से मंजूरी दे दी गई है? मेरा संदेह यह है कि जिसने मुझे यह भेजा है वह वास्तव में एक सी प्रोग्रामर है (सीएफ। टाइपिफ) जिसने कुछ सी कोड को सी ++ में बदलने की कोशिश की है।
हां, यह पूरी तरह से बेकार है। हालांकि यदि वेक्टर कच्चे पॉइंटर्स धारण कर रहे थे तो आपको प्रत्येक पॉइंटर्स पर स्वयं को कॉल करना होगा (जिस बिंदु पर आपको स्मार्ट पॉइंटर्स का उपयोग करना चाहिए)। – Borgleader
जब तक सदस्यों के विनाशकों की आवश्यकता होती है, तो कस्टम विनाशक की कोई आवश्यकता नहीं होती है। –
'typedef _someStruct_ {...} कुछ संरचना; 'पूरी तरह से अनावश्यक भी है, बस' स्ट्रक्चर स्ट्रक्चर {...}; 'लिखें। चूंकि प्रकार एक सी प्रोग्राम में वैध नहीं हो सकता है (क्योंकि यह एक विनाशक का उपयोग करता है) संरचना नाम के लिए टाइपिफ़ का उपयोग करने के लिए कोई कारण नहीं है। –