In below code snippet, although pointer is not initialized the call is still made successfully
temp *ptr;
ptr->func2();
Is it due to C++ language property, or it is VC++6 compiler which is foul playing?
class temp {
public:
temp():a(9){}
int& func1()
{
return a;
}
bool func2(int arg)
{
if(arg%2==0)
return true;
return false;
}
int a;
};
int main(int argc, char **argv)
{
temp *ptr;
int a;
cin>>a;
if(ptr->func2(a))
{
cout<<"Good poniner"<<endl;
}
ptr->func1(); // Does not crash here
int crashere=ptr->func1();// But does crash here
return 0;
}
The C++ compiler doesn’t prevent you from using uninitialised pointers, and although the results are undefined, it’s normal for compilers in the real world to generate code that ignores the fact that the pointer is uninitialised.
It’s one of the reasons why C++ is both fast and (comparatively) dangerous relative to some other languages.
The reason your call to
func2succeeds is that it doesn’t touch itsthispointer. The pointer value is never used, so it can’t cause a problem. Infunc1you do use thethispointer (to access a member variable), which is why that one crashes.