c++ - Calling a method that doesn't access data on a null object pointer sometimes works, sometimes crashes. Why doesn't it always crash? -
मान लें कि हमारे पास यह क्लास है:
class MagicalMysteryClass {public: doSomethingWithoutTouchingInstanceData () { usleep (1000); } निजी: int someData; }
और हम उस पद्धति को एक रिक्त सूचक के माध्यम से कॉल करने का प्रयास करते हैं:
MagicalMysteryClass * obj = 0; obj- & gt; doSomethingWithoutTouchingInstanceData ();
एक मशीन पर, यह गुमराह कॉल वास्तव में 90% समय काम करता है।
अगर मैं एक निरर्थक संकेतक को एक सुसंगत रूप से कॉल करने की अपेक्षा नहीं कर सकता, तो एक और मशीन पर, यह 90% के समय में क्रैश हो जाता है।
तरीके से, मैं इस के विरुद्ध अपने आप को कैसे प्रोजेक्ट कर सकता हूं?
नल पॉइंटर, आप अपना खुद का स्मार्ट पॉइंटर क्लास बना सकते हैं जो त्रुटि को फेंकता है यदि आप इसे डीरेफर करने का प्रयास करते हैं।
टेम्पलेट & lt; typename T & gt; वर्ग ProtectedPtr {सार्वजनिक: ProtectedPtr (T * p = nullptr): पीटीआर (पी) {} टी एंड amp; ऑपरेटर * () {if (ptr == nullptr) std :: runtime_error ("निष्कासन के लिए निरर्थक संकेत की कोशिश"); वापसी * पीटीआर; } टी * ऑपरेटर- & gt; () {if (ptr == nullptr) std :: runtime_error ("dereference शून्य सूचक" का प्रयास); वापसी पीटीआर; } निजी: टी * पीटीआर; };
Comments
Post a Comment