C++的This详解

目录

听说点赞的UU会有好运哦!

听说点赞的UU会有好运哦!

听说点赞的UU会有好运哦!

this指针:

面试常考this:

特别注意:


this指针:

类不保存成员函数,而是放在公共代码段(为什么?答案在C++类详解-CSDN博客
那么,问题来了:
既然是同一个函数,按理说执行结果应该都是一样的
那么它是怎么做到不同的类对象执行不同的成员函数呢?
使用this指针
当对象1调用函数f()时,传参为f(&对象1)
当对象2调用函数f()时,传参为f(&对象2)
...
以此类推
而这个传参,是不是每一次都是我们自己来传呢?
不是,而是编译其来完成
用this指针
这个this就是当前类的指针
注意:
1、形参和实参的位置,我们不能显示写出来
2、在函数内部可以使用
f(const classname* const this){}

面试常考this:


this在那个区?
1、堆 (malloc)
2、栈(局部变量、形参)
3、静态区(static、全局变量)
4、常量区(const不在常量区,const修饰的是后面的对象)
5、对象内(成员变量)

所以,this是在栈区,因为this是一个形参

如果对象为空指针,但是却要调用对象的成员函数,如果这个成员函数没有对这个对象进行解引用,那就不会出错
只不过是对象的成员函数的参数this为空指针而已,我传一个空指针有问题吗?没有任何问题
但是,如果这个成员函数对this进行了解引用,就会出问题,出现空指针解引用的问题

例如下图中,创建了一个A类的对象,并且初始化为nullptr,同时对空指针进行了解引用,按道理来说,应该会出错才对,但是并没有,就是因为根本就没有用到这个空指针,所以也就不会进行解引用,而且,我们在编译阶段call的函数地址都是一样的,也再一次证明类的成员函数没有存储在类内部


特别注意:


因为对象的成员函数不是在对象内部的
所以,当要调成员函数的时候,并不需要用类的对象去进行调用
所以,即使是类的对象是一个空指针,也不会对这个空指针进行解引用
为什么?
因为,对象的成员函数的调用只需要一个this指针作为成员函数的参数
而这个this指针指向的是对象
那么,请问,我传参
是否在乎这个参数是空指针,还是非空指针呢?
不在乎
谁在乎?
只有成员函数内部是否需要对this进行解引用的时候才有关系


 

相关推荐

  1. C# this关键字作用

    2024-03-10 20:04:01       30 阅读
  2. C++this指针与静态成员函数使用方法

    2024-03-10 20:04:01       40 阅读
  3. C++ this 指针

    2024-03-10 20:04:01       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 20:04:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 20:04:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 20:04:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 20:04:01       20 阅读

热门阅读

  1. C# Dictionary<string, string> 对key做筛选

    2024-03-10 20:04:01       20 阅读
  2. 【C语言】深入理解指针(扩展)

    2024-03-10 20:04:01       21 阅读
  3. Kafka整理-Consumer Group(消费者群组)

    2024-03-10 20:04:01       23 阅读
  4. anaconda, conda, conda-forge

    2024-03-10 20:04:01       24 阅读
  5. R语言及其开发环境简介

    2024-03-10 20:04:01       21 阅读
  6. C语言知识点总结09-第九章.字符串

    2024-03-10 20:04:01       22 阅读
  7. 一次gitlab 502故障解决过程

    2024-03-10 20:04:01       21 阅读
  8. 蓝桥杯(日期问题纯暴力)

    2024-03-10 20:04:01       20 阅读
  9. 1. Linux应用编程概念

    2024-03-10 20:04:01       21 阅读