दिलचस्प पोस्ट
एनोटेशन का उपयोग करके आप हाइबरनेट में एक "मानचित्र" कैसे मैप कर सकते हैं? संग्रहीत कार्यविधि फ़ंक्शन में डायनामिक तालिका नाम टेम्पलेट क्लास कन्स्ट्रक्टर के "अपरिभाषित संदर्भ" जांच कर रहा है कि क्या मेरा विंडोज़ अनुप्रयोग चल रहा है jQuery टेक्स्टवेयर पाठ प्राप्त करें AngularJS: फैक्टरी $ http.get JSON फ़ाइल आर – कॉलम जोड़ें, जो क्रमिक रूप से समूहों के भीतर गिना जाता है लेकिन डुप्लिकेट के लिए दोहराता है सर्वर के साथ स्थानीय एचटीएमएल 5 डीबी (वेब ​​एसक्यूएल स्टोरेज, एसक्यूलाइट) को सिंक्रनाइज़ करने का सबसे अच्छा तरीका (2 रास्ता सिंक) विज़ुअल स्टूडियो कुंजीपटल शॉर्टकट स्वचालित रूप से आवश्यक 'कथन' कथन जोड़ने के लिए उदाहरण के साथ .net में निर्भरता इंजेक्शन? क्या मुझे नोडजेएस में निर्भरता इंजेक्शन की ज़रूरत है या किस तरह से निपटना है …? पायथन में लोकेल दिनांक स्वरूपण स्काला पर मैं कैसे टाइप एरीर पर हूं? या, मैं अपने संग्रह के प्रकार पैरामीटर क्यों नहीं प्राप्त कर सकता हूं? एएसपी.नेट "विशेष" टैग हैशसेट बनाम ट्रेसीट

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

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

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

Solutions Collecting From Web of "क्या यह एक नल सूचक को हटाने के लिए सुरक्षित है?"

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);