Powiel możliwe:
Calling class method through NULL class pointerDlaczego metoda wywoływania przez wskaźnik zerowy "działa" w C++?
#include <iostream>
using namespace std;
class test
{
int i;
public:
test():i(0){ cout << "ctor called" << endl;}
void show()
{
cout<<"show fun called"<<endl;
}
};
int main(int argc , char *argv[])
{
test *ptr = NULL;
ptr->show();
return 0;
}
wyraźnie nie konstruktor zostanie wywołany. Czy to standard? lub tylko niektóre optymalizacji kompilatora, ponieważ ten wskaźnik nie jest używany w funkcji członka show()?
Dereferencja zerowy wskaźnik jest UB. – chris
Dodaj 'i = 1;' wewnątrz 'show()' i spróbuj go uruchomić. –
chris, UB oznacza do wdrożenia kompilatora? i używam g ++ 4.6.3. Jesse Good, oczywiście, wadę, nie ma wątpliwości. Zastanawiam się, czy kompilator wygeneruje kod bez tego dla funkcji członka, która jej nie potrzebuje. – bbc