Duplicar posible:
Calling class method through NULL class pointer¿Por qué el método de llamada a través del puntero nulo "funciona" en 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;
}
claridad, se llamará sin ctor. ¿Es este estándar? ¿o solo alguna optimización del compilador ya que este puntero no se usa en la función de miembro show()?
Desreferenciando un puntero nulo es UB. – chris
Agregue 'i = 1;' dentro de 'show()' e intente ejecutarlo. –
chris, UB significa hasta la implementación del compilador? y estoy usando g ++ 4.6.3. Jesse Good, por supuesto, falla seg, no hay duda. Me pregunto si el compilador generará código sin esto para la función miembro que no lo necesita. – bbc