今天被问到如下问题:

CA *p = nullptr;
p->test();

会有什么结果。

实际上不同的成员函数会有不同的情况,经过测试如下:

#include <iostream>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;
}

解析:

  1. 函数若是静态成员函数时,由于没有使用到 this 指针,故不会崩溃。

  2. 函数若是虚函数时,由于需要通过 this 指针获取到虚函数表指针,这个过程中由于 this 为空,则崩溃。

  3. 函数是普通成员函数,由于该函数中没有使用 this,故不会崩溃。

  4. 函数是普通成员函数,若该函数中使用了 this,则崩溃。

总的来说,空的对象指针调用函数时,若调用过程或者函数内部使用了 this,则崩溃。

(SAW:Game Over!)

Cpp / 空指针对象调用函数的不同结果相关推荐

  1. php new对象 调用函数,关于JS中new调用函数的原理介绍

    这篇文章主要介绍了关于JS中new调用函数的原理介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数) ...

  2. C++空指针访问成员函数

    C++空指针访问成员函数 C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码的健壮性 示例 C++中空指针也是可以调用成员函数的,但是 ...

  3. python如何调用cpp文件的接口函数_C++中嵌入Python调用

    python嵌入到C++中 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加"Python.h"头文 ...

  4. c/c++教程 - 2.4.3 this指针作用,链式编程思想,空指针访问成员函数,const修饰成员函数,常函数,常对象

    目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念(非常重要) 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 相关教 ...

  5. python3 动态创建类对象并调用函数

    1. 首先import相关模块`import importlib` 2. 加载你想要加载的模块`model = importlib.import_module(模块名称)` 3. 获取类对象`api_ ...

  6. C语言什么时候必须用到二级指针?(需要调用函数为一维空指针确定值的情况下,需要传入二维指针,也就是那个一维指针的指针)

    结论:需要调用函数为一维空指针确定值的情况下,需要传入二维指针,也就是那个一维指针的指针 例子:为空指针p开辟内存空间 1.不用二级指针(无法实现) #include <stdio.h> ...

  7. javascript中实例对象和构造函数关系、原型语法、原型链、call实现继承、apply调用函数、bind拷贝函数、拷贝继承、class类、super、严格模式、高阶函数、闭包、递归、es6简介

    实例对象和构造函数的关系及原型: 实例对象是通过构造函数创建出来的,实例对象的构造器constructor就是指向构造函数的:每个实例对象中的同一方法的指向是各不相同的,但是其属性值相同的属性可以相同 ...

  8. 使用/调用 函数的时候, 前面加不加 对象或 this?

    这个问题, 其实没有细想: 应该是这样的: (想明白了, 就会少很多困惑, 会对语言的把握 会 更深入更透彻) 任何一门 语言, (如果你自己去设计一门语言...). 都要规定 一些 "关键 ...

  9. C++_类和对象_对象特性_空指针访问成员函数_用法和问题解决---C++语言工作笔记050

    然后我们再来看空指针访问成员函数,实际上在c++中null指针也是可以访问成员函数的, 有些人可能会觉得奇怪,不用奇怪. 去看看代码,去写个person类 写个showClassName()方法,打印 ...

最新文章

  1. centOS下调整swap
  2. [Nova ERROR] InternalError: Nova requires QEMU version 2.5.0 or greater.
  3. oracle left join优化
  4. ESX 4 不能使用SSH登录的解决
  5. Android 的滑动分析以及各种实现
  6. 学号20145209《信息安全系统设计基础》第11周学习总结
  7. STM32 设置片外SRAM分散加载
  8. 简易调用及实例化控制器
  9. 数据库不可重复读和幻读的区别
  10. java中notify是什么意思_java中wait,notify,notifyAll是什么?
  11. phpcms开启在线编辑模版 方法
  12. python提取某一列数据,Python numpy 提取矩阵的某一行或某一列的实例
  13. 华住2.0? 5亿万豪用户信息泄漏! 个人隐私如何保护? 离不开区块链
  14. 【计算机网络四】网络层
  15. python数据分析师面试_数据分析师面试_业务分析师_数据分析场景如何结合企业业务分析...
  16. 考研结束,一起聊聊考研中的故事
  17. 点云配准--4PCS原理与应用
  18. Hugegraph合集(一):图数据库技术调研
  19. WEEKDAY函数:
  20. vNext中ABP的Exception的Http中的Status Code

热门文章

  1. golang(5):编写WebSocket服务,client和html5调用
  2. python 日志打印
  3. 完整版使用Shell脚本在多个服务器同时实现Mysql建表语句和删除表
  4. Verdaccio介绍及安装 -- nodejs私有npm proxy registry代理
  5. reactjs创建虚拟DOM的两种方式:使用jsx和js创建虚拟DOM
  6. 解决chrome安装扩展插件导入.crx文件提示:程序包无效的错误
  7. MySQL 开启远程登录权限
  8. 【软考-软件设计师】计算机系统基础知识
  9. php离开界面监听,js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)...
  10. 任务——μ/COS-II读书笔记