Cpp / 空指针对象调用函数的不同结果
今天被问到如下问题:
CA *p = nullptr;
p->test();
会有什么结果。
实际上不同的成员函数会有不同的情况,经过测试如下:
#include class CA
{
public:static void s_fun() {}virtual void v_fun() {}void fun1() {}void fun2() { i = 2; }private:int i = 0;
};int main()
{CA *p = nullptr;p->s_fun();//p->v_fun(); // 崩溃p->fun1();//p->fun2(); // 崩溃return 0;
}
解析:
-
函数若是静态成员函数时,由于没有使用到 this 指针,故不会崩溃。
-
函数若是虚函数时,由于需要通过 this 指针获取到虚函数表指针,这个过程中由于 this 为空,则崩溃。
-
函数是普通成员函数,由于该函数中没有使用 this,故不会崩溃。
-
函数是普通成员函数,若该函数中使用了 this,则崩溃。
总的来说,空的对象指针调用函数时,若调用过程或者函数内部使用了 this,则崩溃。
(SAW:Game Over!)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
