美文网首页C语言编程语言爱好者C++
C++ 学习笔记:类的内存分配及this指针

C++ 学习笔记:类的内存分配及this指针

作者: 久伴必知情深 | 来源:发表于2018-08-25 11:14 被阅读4次

类,是使用C++的最主要的内容。如果将c++与C语言做比较,我感觉类更像是结构体的加强进化版。在刚接触C++不久的时候总是让类,对象,this指针弄得一脸懵逼,我对类有比较清楚的认识是从理解类在内存中的存放开始的。。

什么是类:

  类就是用来描述一件事物有什么属性,有什么作用;比如定义一个猫类,那么这个类就是有爬树,卖萌这些功能(函数实现);有花色,性别等属性(成员)。这些作为一个整体就是一个类就像是C语言定义了一个结构体,类也就是一种数据结构(个人理解)。

什么是对象:

  定义好一个猫类之后就类似定义好了一种数据结构,结构体定义好了要声明实例,那么类声明的实例就是对象。

类-在内存中怎么存放

  结构体在内存中的存放比较容易理解:

复制代码

struct test{   

    char c_b;

    int  i_a;

    short s_c;

};

struct test1{

      int  i_a;

      char c_b;

      short s_c;

};

复制代码

 32位系统中,按四字节对齐 :sizeof (test) == 3*4 =12  .; sizeof(test1) == 2*4 =8 ;

 总而言之一个结构体里面的成员按照四字节对齐(看编译器),里面的成员都是放在内存里的,那么类就不是这样了。下图类比 一个类和结构体

图1

上图左侧是一个类,右侧是一个结构体。类声明了一个对象a,结构体也是声明一个实例a。对象a通过调用自己类的函数获得的结果和实例a作为函数参数产生的结果一样。

其实C++编译器对一个类的处理也就是类似这种方式,根据上图我们可以看出一下几点:

1.类的成员函数可以看作是一些全局函数(成员函数也是放在和普通函数一样的内存区域),通过隐藏起来的this指针来区分到底是哪个对象调用

2.私有变量是每个对象私有的,声明一个对象内存里就多了这些私有变量,就像声明了一个结构体实例一样,但是成员函数还是一样没有增加。

3.静态成员函数是没有隐藏this指针的,所以对象不能调用,只能通过类调用;所以在静态成员函数中不能访问私有成员(区分不了是哪个对象的私有成员)。

 静态成员变量则是像一个全局变量,是同一类的所有对象共享的,即 比如A,B都是类TEST的对象,有一个静态成员变量t,那么A.t 是和B.t共享一块内存的。

刚开始学习类的时候一直很纠结为什么一个对象不用像结构体实例那样设置函数指针就能调用到函数。。。。现在可以说是很清晰了。。。

this 指针

  理解完上面的比较图之后再来看this指针就简单多了。很明显,this指针就是告诉编译器这个成员函数是哪个对象在调用,它是一个函数的传参,被隐藏了而已。

  那么this指针就是一个传参,这个参数是一个指针,传入的地址就是调用这个函数的对象。

  例(接上图):

  Test test_a(10);

  a.get();

  a.get()函数里面隐藏了一个传参,就是&a(对象a的地址)。那么我们写get函数的时候就可以使用this指针来操作私有成员了。

需要学习基础资料的伙伴可以加C++直播免费学习群:365209777.输入学习编码:久伴。就可以进去免费学习哦

相关文章

  • C++ 学习笔记:类的内存分配及this指针

    类,是使用C++的最主要的内容。如果将c++与C语言做比较,我感觉类更像是结构体的加强进化版。在刚接触C++不久的...

  • 对象的实例化

    类加载-》定位到类引用分配内存 指针碰撞 空闲列表初始化零值对象头分配 类指针 哈希码 GC年龄 锁标记对象定位 ...

  • C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 辅助类 智能指针类 使用测试 参考: C++ 引用计数技术及智能指针...

  • 随笔1

    c++ 指针和引用的区别 1 指针是指向一个地址,未初始化的指针没有分配内存,那么此时此时直接使用指针是危险的,所...

  • JVM对象创建与内存分配机制

    一、分配内存 分配内存的方式分两种: 1.指针碰撞:就是按照内存顺序分配,是规整的,分配内存就是把指针向空闲的区域...

  • 函数指针-函数指针-案例-动态分配内存-重新分配内存-内存泄漏

    1、函数指针2、函数指针-案例3、动态分配内存4、重新分配内存5、内存泄漏 1、函数指针 2、函数指针-案例 3、...

  • 智能指针

    指针的危害 指针未初始化 野指针 内存泄漏 参考阅读C/C++指针使用常见的坑 智能指针分类 本质:将指针封装为类...

  • C++面试题目总结

    C++常考题目参考本 1、指针和引用的区别 实体与别名 内存分配,指针需要引用不需要 sizeof() 对象的大小...

  • 理解JS中的原型

    动态语言和静态语言有很大的不同,比如在C++中定义类时,并不分配内存,而在动态语言中定义类时,却会分配内存。 比如...

  • c++11智能指针(一) shared_ptr

    智能指针是存储动态分配对象指针的类,用于生命周期的控制。当指针离开其作用域时,自动销毁动态分配的空间,防止内存泄漏...

网友评论

    本文标题:C++ 学习笔记:类的内存分配及this指针

    本文链接:https://www.haomeiwen.com/subject/dsnwiftx.html