重複の可能性あり:
NULLクラスポインタを介してクラスメソッドを呼び出す
#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;
}
明らかに、ctor は呼び出されません。これは標準ですか? それとも、このポインターは show() メンバー関数では使用されないというコンパイラの最適化ですか?
ベストアンサー1
メソッドを呼び出すのにポインタは必要ありません。ポインタの型はわかっているので、メソッドのコードもわかっています。メソッドは を使用しないのでthis
、コードは問題なく実行されます。これは未定義の動作ですが、ポインタが NULL かどうかをチェックしない方が効率的なので、実行されます。