空类指针调用成员函数 类内的this指针

来源:互联网 发布:安迪大师飞越黄河知乎 编辑:程序博客网 时间:2024/06/04 19:01

运行下面中的代码,得到的结果是什么

class A

{

private:

        int m_value;

public:

        A(int value)

        {

                m_value = value;

        }

        void Print1()

        {

                printf("hello world");

        }

        void Print2()

        {

                printf("%d", m_value);

        }

};

int _tmain(int argc, _TCHAR* argv[])

{

        A* pA = NULL;

        pA->Print1();

        pA->Print2();

        return 0;

}

分析:

答案是Print1调用正常,打印出hello world,但运行至Print2时,程序崩溃。

 

调用Print1时,并不需要pA的地址,因为Print1的函数地址是固定的。编译器会给Print1传入一个this指针,该指针为NULL,但在Print1中该this指针并没有用到。只要程序运行时没有访问不该访问的内存就不会出错,因此运行正常。

 

在运行print2时,需要this指针才能得到m_value的值。由于此时this指针为NULL,因此程序崩溃了。

原创粉丝点击