दिलचस्प पोस्ट
कैसे। Htaccess में RewriteBase काम करता है जावा में JSON ऑब्जेक्ट में हैशप को कैसे परिवर्तित करें क्या आप उन्हें "डिस्क" में सहेजने के बजाय वीडियो बनाने के लिए "स्ट्रीम" चित्रों को एफएफपीएजी में भेज सकते हैं? Android ऑफ़लाइन दस्तावेज़ और नमूना कोड जावा धाराओं में फ्लश () का उद्देश्य क्या है? जड़ क्या हैं? मैं Visual C ++ में किसी संस्करण संसाधन से कैसे पढ़ूं रीडायरेक्ट किए गए पृष्ठ में चेहरे का संदेश कैसे दिखाना किसी मोंगोडीबी दस्तावेज़ में एक दोगुनी-नेस्टेड ऐरे से एक तत्व को कैसे निकालना रेगएक्स दो स्ट्रिंग्स के बीच सभी वर्णों को मिलाएं वर्तमान में जावा में चल रहे सभी थ्रेडों की एक सूची प्राप्त करें कैसे स्थानीय और वैश्विक चर डिफ़ॉल्ट रूप से आरंभ किए जाते हैं? मैक ओएस एक्स तेंदुए कुंजी बाइंडिंग पर एमएक्स @OneToMany एसोसिएशन के परिणामों को फ़िल्टर करने के लिए एनोटेशन डेल्फी संस्करणों में यूनिकोड स्ट्रिंग को संभालने <= 2007

क्या यह एक नल सूचक को हटाने के लिए सुरक्षित है?

क्या यह एक नल सूचक को हटाने के लिए सुरक्षित है?

और क्या यह एक अच्छा कोडन शैली है?

वेब के समाधान से एकत्रित समाधान "क्या यह एक नल सूचक को हटाने के लिए सुरक्षित है?"

delete गए चेक को वैसे भी करता है, इसलिए इसे अपने पक्ष में जांचना ओवरहेड जोड़ता है और कुटिलता दिखाई देता है। एक बहुत अच्छा अभ्यास हटाए जाने के बाद पॉकेट को रिक्त करने के लिए सेट कर रहा है (दोहरे विलोपन और अन्य समान स्मृति भ्रष्टाचार समस्याओं से बचने में मदद करता है)

मुझे यह भी पसंद है कि डिफॉल्ट से delete होने पर पैरामीटर को नल की तरह सेट करना था

 #define my_delete(x) {delete x; x = NULL;} 

(मैं आर और एल मूल्यों के बारे में जानता हूं, लेकिन क्या यह अच्छा नहीं होगा?)

सी ++ 0x ड्राफ्ट स्टैंडर्ड से

$ 5.3.5 / 2 – "[…] या तो वैकल्पिक में, हटाए जाने के संचालन का मान एक अशक्त सूचक मान हो सकता है। [… ''

बेशक, कोई भी नल मूल्य के साथ एक सूचक का 'हटा' कभी नहीं होगा, लेकिन यह करना सुरक्षित है आदर्श रूप में कोई भी कोड नहीं होना चाहिए जो एक शून्य सूचक का विलोपन करता है। लेकिन यह कभी-कभी उपयोगी होता है जब पॉइंटर्स को हटाया जाता है (जैसे कंटेनर में) एक लूप में होता है चूंकि एक नल पॉइंटर वैल्यू को हटाना सुरक्षित है, इसलिए वास्तव में नल ऑपरेंड को हटाने के लिए स्पष्ट चेक के बिना विचलन तर्क वास्तव में लिख सकता है।

एक अलग के रूप में, C मानक $ 7.20.3.2 यह भी कहता है कि किसी मुफ्त सूचक पर 'निशुल्क' कोई कार्रवाई नहीं करता है

नि: शुल्क समारोह में पीटीआर को स्थानांतरित करने की जगह का कारण बनता है, जिसे आगे आवंटन के लिए उपलब्ध कराया जाता है। यदि ptr एक नल सूचक है, कोई कार्रवाई नहीं होती है।

हाँ यह सुरक्षित है

एक अशक्त सूचक को हटाने में कोई नुकसान नहीं है; यह अक्सर फ़ंक्शन की पूंछ पर परीक्षणों की संख्या को कम करता है यदि बिना आवृत पॉइंटर्स को शून्य पर आरंभ किया जाता है और फिर केवल हटाया जाता है


चूंकि पिछले वाक्य में भ्रम का कारण है, एक उदाहरण – जो कि अपवाद सुरक्षित नहीं है – जो वर्णन किया जा रहा है:

 void somefunc(void) { SomeType *pst = 0; AnotherType *pat = 0; … pst = new SomeType; … if (…) { pat = new AnotherType[10]; … } if (…) { …code using pat sometimes… } delete[] pat; delete pst; } 

सभी प्रकार के एनआईटी हैं जिन्हें नमूना कोड से चुना जा सकता है, लेकिन अवधारणा (मुझे उम्मीद है) स्पष्ट है। सूचक चर को शून्य में आरंभीकृत किया जाता है ताकि फ़ंक्शन के खत्म होने पर delete गए कार्यों को यह परीक्षण करने की आवश्यकता नहीं है कि क्या वे स्रोत कोड में अनावश्यक हैं; पुस्तकालय कोड करता है कि वैसे भी जांच करता है।

किसी रिक्त सूचक को हटाने का कोई प्रभाव नहीं पड़ता है। यह जरूरी नहीं कि यह अच्छा कोडिंग शैली है क्योंकि इसकी आवश्यकता नहीं है, लेकिन यह भी बुरा नहीं है

यदि आप अच्छे कोडिंग प्रथाओं के लिए खोज कर रहे हैं तो इसके बजाय स्मार्ट पॉइंटर्स का उपयोग करने पर विचार करें ताकि आपको बिल्कुल भी delete पड़े न हो।

यह तब तक सुरक्षित है जब तक हटाए गए ऑपरेटर को ओवरलोड नहीं किया जाता है।

मैंने अनुभव किया है कि यह [] शून्य (यानी सरणी सिंटैक्स) को हटाने के लिए सुरक्षित नहीं है (VS2010)। मुझे यकीन नहीं है कि यह सी ++ मानक के अनुसार है।

नल (स्केलर सिंटैक्स) को हटाने के लिए यह सुरक्षित है

रूसलिक के उत्तर में, सी ++ 14 में आप उस निर्माण का उपयोग कर सकते हैं:

 delete std::exchange(heapObject, nullptr);