2012-01-23 10 views
6

Eventuali duplicati:
What will happen when I call a member function on a NULL object pointer?Perché è possibile chiamare una funzione membro non statica senza un'istanza dell'oggetto?

Beh penso che questo codice e il programma di uscita spiegare è di per sé:

#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; 
} 

output del programma:

Funzione non statica chiamata senza oggetto?

perché è possibile?

+5

Perché è un comportamento non definito, quindi può succedere di tutto. –

+0

@FredLarson, anche se è vero, in realtà non * spiega * perché è possibile. –

+0

È possibile perché non è compito di C++ impedirti di spararti in faccia. –

risposta

9

Comportamento non definito. Il tuo programma richiama un comportamento non definito invocando un metodo su un puntatore nullo, quindi è tutto consentito, incluso l'output.

Ricordare: le specifiche del linguaggio C++ non specificano l'output di ogni programma possibile per lasciare spazio alle ottimizzazioni. Molte cose non vengono controllate esplicitamente e possono comportare comportamenti che sembrano errati o illogici, ma semplicemente non specificati.

2

Perché non utilizza this e pertanto non designa il puntatore nullo. Renderlo virtuale e probabilmente fallirà.

5

Questo comportamento non è definito, pertanto è possibile che stampi quell'output. Il problema è un comportamento indefinito che può facilmente morderti, quindi non dovresti fare una cosa del genere.

Problemi correlati