कोड को देखते हुए:
# include & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; वर्ग स्ट्रिंग {char * pstr; अहस्ताक्षरित आकार; सार्वजनिक: स्ट्रिंग () {pstr = 0; आकार = 0;} स्ट्रिंग (const char *); शून्य शो () {cout & lt; & lt; Pstr & lt; & lt; एंडल; } ~ स्ट्रिंग () {cout & lt; & lt; "डीटीओआर में" & lt; & lt; endl; हटाएं [] pstr; }}; स्ट्रिंग :: स्ट्रिंग (const char * cptr) {size = strlen (cptr) + 1; Cout & lt; & lt; "स्ट्रिंग है -" & lt; & lt; सीपीटीआर & एलटी; & lt; "आकार का" & lt; & lt; आकार - 1 & lt; & lt; एंडल; Pstr = नया चार [आकार]; के लिए (इंट i = 0; i & lt; आकार; i ++) pstr [i] = सीपीटीआर [i]; } Int main () {स्ट्रिंग एस ("हैलो वर्ल्ड"); s.show (); रों ~ स्ट्रिंग ()। } आउटपुट:
स्ट्रिंग है - हैलो वर्ल्ड - आकार 11 - हैलो वर्ल्ड इन डीटीओआर ---- डीबग निश्वासन विफलता ---- डीटीओआर में क्यों विनाशकारी को फिर से बुलाया जाता है?
और भी यह कोड वैध है?
चार * ptr = 0; शून्य मज़ा () {const char * p = "हैलो वर्ल्ड"; इंट साइज = स्ट्रेलन (पी) + 1; Cout & lt; & lt; आकार & lt; & lt; endl; Ptr = (चार *) malloc (आकार); के लिए (इंट आई = 0; आई & lt; आकार; i ++) पीटीआर [आई] = पी [आई]; Cout & lt; & lt; पी एंड एलटी; & lt; एंडएल & lt; & lt; Ptr & lt; & lt; एंडल; } Int main () {मजेदार (); नि: शुल्क (पीटीआर); - & gt; नोट} सूचक दूसरे फ़ंक्शन से मुक्त हो सकता है? यह मुख्य बात यह है कि मैं यहां समझने की कोशिश कर रहा हूं।
आपको मैन्युअल रूप से डिस्ट्रक्टर नहीं करना चाहिए - यह s फाइनल में दायरे से बाहर निकलता है तब लागू होता है '}' एक असफलता विफलता का मतलब है कि कुछ का दावा करता है (कुछ कंडिशन) और कोई शर्त गलत था। यह आपकी मान्यताओं को मान्य करने के लिए एक तकनीक है - यदि आपका कोड कुछ विशिष्ट स्थिति को सत्य होने पर निर्भर करता है, और जब तक आपके पास कोई बग नहीं है, तब तक यह स्थिति सच होना चाहिए, फिर आप एक जोर डालें फिर आप दावे के साथ संकलित करने के लिए चुन सकते हैं - इसका मतलब है कि यदि आपकी धारणा गलत थी तो आपको ऐसी त्रुटि मिल जाएगी। रिलीज़ बिल्ड के लिए, आप अकसर तर्क देते हैं कि - कोई भी कोड जोर देने के लिए तैयार नहीं है, और कोई अतिरिक्त रनटाइम लागत नहीं है।
ऐसे मामलों में जब मैन्युअल रूप से डिस्ट्रक्टर को लागू करने के मामले हैं - आपको ज़रूरत नहीं होगी जब तक आप "प्लेसमेंट न्यू" के बारे में जानने और उपयोग नहीं करते हैं।
Comments
Post a Comment