C++中this指针的本质

C++中this指针的本质一直以来对C++中的this不理解,只知道在构造函数中,如果构造函数的参数和类成员的名字一样的话,就可以用this指针来区分,如:this->a=a;一直以来都有这个疑问:this究竟是什么?我们明明没有定义这个this,但是我们可以直接用而编译器不会报错。今天来解决这个疑问。从刚才的代码中,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++中,指针

大家好,又见面了,我是你们的朋友全栈君。

一直以来对C++中的this不理解,只知道在构造函数中,如果构造函数的参数和类成员的名字一样的话,就可以用this指针来区分,如:

this->a = a;

一直以来都有这个疑问:this究竟是什么?我们明明没有定义这个this,但是我们可以直接用而编译器不会报错。今天来解决这个疑问。
从刚才的代码中,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++中,指针就是地址,因此很容易想到,this也是一个地址。但是问题来了,this是谁的地址呢?我们看下面这个很简单的C++程序:

#include <iostream>

class A
{
public:
    A();

};

A::A()
{
    std::cout << "this " << this << std::endl;
}

int main()
{
    A a;
    std::cout << "&a " << &a << std::endl; 

    return 0;
}

大家先在自己的脑袋中运行一下这个程序,然后看自己运行的结果与下面的是不是一样。
这里写图片描述

我们可以看到,this和&a的结果是一样的。由此可以看出,this就是a的地址,而a是类A的一个对象,占用了sizeof(A)的内存空间。

执行到A a这一句的时候,其实就生成了类A的一个对象,并同时为这个对象分配了sizeof(A)的内存空间,其实这个时候this也生成了,this就指向了这段内存空间,如下图所示:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145807.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用DbUtils实现CRUD

    使用DbUtils实现CRUD

    2022年1月2日
    44
  • zabbix监控哪些指标_zabbix监控爱快

    zabbix监控哪些指标_zabbix监控爱快前言面试中经常会被问到一些技术问题,面试官一方面是看你对于当前技术的点的掌握情况,另一方面是判断你是否在公司里干过,毕竟很多技术只要自学一下就能应付面试。今天我们来聊聊,面试中那些高频的问题,比如zabbix你都监控哪些参数。一.原理解释说到监控,在运维这个行业其实有很多开源的监控方案,目前最常见的就是zabbix+grafana,我工作那时候还是用cacti和nagios的比较多。还记得以前去面试,面试官来了一句,zabbix会搭建吗,会的话你在这搭建下,30分钟搭建出来就入职。不管

    2025年8月21日
    4
  • ssm框架搭建过程[通俗易懂]

    ssm框架搭建过程[通俗易懂]ssm框架搭建过程

    2022年4月25日
    35
  • tomcat 宕机原因排查

    tomcat 宕机原因排查一、近期突然发生的现象。可能原因:被恶意攻击或利用排查方式:1、运行tomcat并查看tomcat用户是否开启了陌生进程,同时看下tomcat相关目录、系统/tmp目录有没有陌生文件2、将该tomcat的访问转向一个不匹配的tomcat,然后通过查看错误日志,看是否有频繁…

    2022年7月26日
    42
  • JAVA api_java的api文档

    JAVA api_java的api文档JAVAJDK1.8API帮助文档中文版百度云链接:https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ密码:41n4

    2022年8月6日
    8
  • apache基于域名虚拟主机配置_php配置虚拟主机

    apache基于域名虚拟主机配置_php配置虚拟主机一、apache虚拟主机的配置1、首先在apache的安装目录下找到conf目录下找到httpd.conf文件然后搜索hosts找到把前面的井号去掉即可启动虚拟主机2、然后在apache的安装目录下找到conf目录下的extra找到httpd-vhosts.conf文件在文件最后添加类似我下面的配置,详细参数见说明我这里以myvirtualho

    2025年12月9日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号