2012-01-23 14 views
6

संभव डुप्लिकेट:
What will happen when I call a member function on a NULL object pointer?ऑब्जेक्ट इंस्टेंस के बिना गैरस्टिक सदस्य-फ़ंक्शन को कॉल करना क्यों संभव है?

खैर मुझे लगता है कि इस कोड और कार्यक्रम उत्पादन यह स्वयं की व्याख्या:

#include <iostream> 
#include <string> 
using namespace std; 

class Test 
{ 
public: 
    void Not_Static(string args) 
    { 
     cout << args << endl; 
    } 
}; 

int main() 
{ 
    Test* Not_An_instance = nullptr; 
    Not_An_instance->Not_Static("Non-static function called with no object?"); 
    cin.ignore(); 
    return 0; 
} 

कार्यक्रम उत्पादन:

गैर-स्थैतिक फ़ंक्शन कोई ऑब्जेक्ट नहीं है?

यह क्यों संभव है?

+5

क्योंकि यह अपरिभाषित व्यवहार है, इसलिए कुछ भी हो सकता है। –

+0

@FredLarson, हालांकि सच है, यह वास्तव में * समझा नहीं है * यह क्यों संभव है। –

+0

यह संभव है क्योंकि यह आपको चेहरे पर खुद को शूटिंग से रोकने के लिए सी ++ का काम नहीं है। –

उत्तर

9

अपरिभाषित व्यवहार। आपका प्रोग्राम एक शून्य सूचक पर एक विधि का आह्वान करके अपरिभाषित व्यवहार का आह्वान करता है, इसलिए आपके आउटपुट सहित की अनुमति है।

याद रखें: सी ++ भाषा का विनिर्देश अनुकूलन के लिए कमरे छोड़ने के लिए हर संभव कार्यक्रम के आउटपुट को निर्दिष्ट नहीं करता है। कई चीजों को स्पष्ट रूप से चेक नहीं किया जाता है और परिणामस्वरूप गलत या अजीब लगता है, लेकिन यह केवल अनिर्दिष्ट है।

2

क्योंकि यह this का उपयोग नहीं करता है और इसलिए शून्य सूचक को कम नहीं करता है। इसे आभासी बनाओ और यह असफल हो जाएगा।

5

यह व्यवहार अपरिभाषित है - इसलिए यह काफी संभव है कि यह उस आउटपुट को प्रिंट करेगा। मुद्दा अनिर्धारित व्यवहार आपको आसानी से काट सकता है, इसलिए आपको ऐसा कोई काम नहीं करना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे