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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python创建学生管理系统_学员管理系统 培训机构

    python创建学生管理系统_学员管理系统 培训机构使用面向对象完成了学员管理系统,实现了添加、删除、修改、查询、保存读取等功能。将学员、学员管理后台、开始入口分为了3个py文件,分别是Student.py、Student_management.py、main.py。保存文件名叫student.txt文件。内含注释,我也是给初学者,可能有些地方解释不清楚。Student.py代码如下#定义学生的类classStudent(object):def__init__(self,name,gender,number):

    2022年9月16日
  • laravel 远程一对多实例

    laravel 远程一对多实例

    2021年11月9日
  • 详解 JVM Garbage First(G1) 垃圾收集器

    详解 JVM Garbage First(G1) 垃圾收集器版权声明:本文为博主原创文章,转载请联系作者并注明出处。详解JVMGarbageFirst(G1)垃圾收集器前言GarbageFirst(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进

    2022年6月13日
  • iview中Modal弹窗做form表单验证相关问题[通俗易懂]

    iview中Modal弹窗做form表单验证相关问题[通俗易懂]iview中Modal弹窗做form表单验证相关问题

    2022年4月22日
  • Object C中的数据类型表

    类型例子NSLogcharschar'a','\n'%cshortint—%hi,%hx,%hounsignedshortint%hu,

    2021年12月26日
  • redhat配置yum源服务器_redhat7网络yum源配置

    redhat配置yum源服务器_redhat7网络yum源配置配置yum源redhat默认自带的yum源需要注册才能更新,可以更换成Centos的yum源.文章目录配置yum源前言一、yum源的工作原理?二、yum配置步骤1.查看系统已经安装的yum2.删除自带的yum包3.下载相关的安装包4.安装包5.下载配置文件6.更新前言Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动

    2022年8月12日

发表回复

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

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