调用NULL对像的方法会怎样
来源:互联网 发布:oneinstack java 编辑:程序博客网 时间:2024/05/21 11:08
class A{public: virtual void fun() { std::cout << "A fun" << std::endl; }};class B : public A{public: void fun() { std::cout << "B fun" << std::endl; } void foo1() { std::cout << a << std::endl; } void foo2() { std::cout << "" << std::endl; }private: int a;};int main(){ A a; B *pb = dynamic_cast<B*>(&a); pb->fun(); //结果1 pb->foo1(); //结果2 pb->foo2(); //结果3 return 0;}
不必说,pb肯定为NULL了,那结果1、2、3是啥呢。跟据平时的经验,肯定是程序崩溃对吧。
运行后结果1崩溃,结果2崩溃,结果3竟然成功输出,为何?
pb为虚函数,编译器需要根据对象的虚函数指针查找虚函数表,由于对象为NULL,虚表指针也就为NULL,所以结果1崩溃。再看结果2与3,都不是虚函数,无需要虚表指针。那函数得用上吧,这好办,直结从代码段取到程序栈上就搞定了,必竟函数的代码是对象共有的。所以即使对象为NULL,也应该能调到函数。那为合结果2会失败。其实编译器会为每个函数传入一个this指针,输出a相当于this->a,this为NULL,程序崩溃。
阅读全文
0 0
- 调用NULL对像的方法会怎样
- js对像中的方法的两种方调用方式
- java的多态——null参数会调用哪个方法?
- Load 外部swf并调用其中的对像元件的方法
- 找对像的几种方法
- String对像的方法属性
- hessian调用中断会怎样
- Array的join()方法会忽略null和undefined
- c++怎样调用类的静态方法
- [读书摘记]调用另一个Activity--Intent对像的使用
- Service的onRebind()方法什么时候会调用
- webResponse对像转换方法
- Asp.net中对像使用继承的方法(:)
- null也可以调用方法?????
- 通过一个非法的指针或者NULL指针调用成员函数会发生什么?
- 求救:为什么调用System.console()方法返回的是null?
- 对象调用Close 方法和null的分别
- 通过接口调用方法,接口一直为null的解决方法
- Python笔记(五)三级菜单
- beautiful C code(updating)
- springMvc请求的跳转和传值
- 【java web】springMVC框架实现用多选框批量删除表数据功能
- Java浮点数在计算机中的表示方法(IEEE754-1985)
- 调用NULL对像的方法会怎样
- error:尝试引用已删除的函数或已显式删除函数
- 菜鸟看源码之HashMap
- 001_docker入门_安装-卸载docker-ce
- BZOJ2741 【FOTILE模拟赛】L 可持久化Trie+分块
- MakeFile文件的书写
- Linux system函数的执行命令并获取状态
- win下python3与C++进行socket通信
- Struts2里的动态方法调用和namespace问题