मेरे पुराने कोड परियोजनाओं के एक जोड़े जब मैं स्मार्ट संकेत कभी नहीं सुना था, जब भी मैं चाहे सूचक अभी भी एक मान्य वस्तु की ओर इशारा किया की जाँच करने के लिए आवश्यक में, मैं हमेशा करना होगा अगर कुछ इस तरह ...Nullptr और जाँच एक वैध वस्तु के लिए एक सूचक अंक
object * meh = new object;
if(meh)
meh->member;
या जब मैं इस
if(meh)
{
delete meh;
meh = 0;
}
खैर की तरह वस्तु को सुरक्षित रूप से कुछ को हटाने के लिए, की जरूरत है, अब मैं समस्याओं है कि वस्तुओं और संकेत का उपयोग करने से उत्पन्न हो सकता है के बारे में सीखा है बुलियन अभिव्यक्तियों में शाब्दिक संख्याओं के साथ, कठिन तरीका:। और अब मैं भी सी ++, nullptr
कीवर्ड की तो कोई नई बात नहीं है, लेकिन बहुत अच्छा सुविधा के सीखा है। लेकिन अब मैं उत्सुक हूँ।
मैं पहले से ही के माध्यम से चला और मेरे कोड के सबसे संशोधित इतना है कि, उदाहरण के लिए, जब वस्तुओं को हटाने मैं अब लिखने
if(meh)
{
delete meh;
meh = nullptr;
}
अब मैं बूलियन के बारे में सोच रहा हूँ है। जब आप बस से पारित इस तरह एक अगर बयान में एक पूर्णांक कहते हैं,
int meh;
if(meh)
तो यह परोक्ष आप इसे लिखने के लिए जरूरत के बिना शून्य के लिए जाँच करता है।
if(meh == 0) // does the exact same check
अब, सी ++ पॉइंटर्स के लिए समान होगा? यदि एक char * में इस तरह के बयान में पास हो?
char * meh;
if(meh)
तो क्या यह स्पष्ट रूप से इसकी तुलना नलप्टर से करेगा? कब तक मैं इस तरह इन आईएफएस लिख दिया है के कारण, यह जाँच करने के लिए इस बिंदु पर दूसरा स्वरूप है अगर संकेत टाइपिंग अगर (वस्तु *) और फिर अपने सदस्यों को फोन करके उपयोग करने से पहले मान्य। यदि यह कार्यक्षमता नहीं है तो क्यों नहीं? कार्यान्वित करना बहुत मुश्किल है? एक और छोटे तरीके को हटाकर आप कुछ समस्याएं हल कर सकते हैं जिससे आप अपना कोड गड़बड़ कर सकते हैं।
आप ** हटाएं ** ** हटाए जाने से पहले पॉइंटर्स को किक करने की आवश्यकता नहीं है। 'Nullptr'' को हटाने के लिए यह पूरी तरह से सुरक्षित है। –
आपके आखिरी उदाहरण में, क्या आपका मतलब 'char * meh = nullptr था; अगर (हुंह) '? सूचक अनियमित है। –
आपकी 'नई' अभिव्यक्ति का नतीजा कभी भी शून्य नहीं होगा, अपवादों का उपयोग इसके बजाय किया जाता है। जैसा कि बताया गया है, शून्य को हटाना ठीक है, यह कुछ भी नहीं करता है। साथ ही, पॉइंटर्स मान को शून्य पर रीसेट न करना आम तौर पर बेहतर होता है। आखिरी बार इसका इस्तेमाल किया जाने वाला आखिरी बार होना चाहिए, इसलिए हटाए गए पॉइंटर तक पहुंच होने पर बग माना जाना चाहिए; इसे शून्य छिपाने के लिए सेट करें। – GManNickG