C++之中this指针与类的六个默认函数小结
Posted Loving_初衷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之中this指针与类的六个默认函数小结相关的知识,希望对你有一定的参考价值。
我们先来看看this指针。之前看过一篇关于this指针的文章,觉得写的很好,今天决定自己来写一写,顺便总结一下C++里面关于类的一些内容。
什么是this指针呢?简单的说它是一个指向类的实例的指针,就好像当我们在进入一个房子之后,可以看见房子里的桌子,椅子、地板等, 但是看不到房子的全貌。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个实例。
来看看this指针的特性:
1)this指针的类型是一个类类型 * const, 这表示什么呢?如果你想在你的成员函数之中改变你的this指针的指向,很显然,做不到!
2)不过当你在使用sizeof操作符的时候千万要注意,不要把this指针的大小考虑进去,这是为什么呢?this指针本身不占用大小,它并不是对象的一部分,因此不会影响sizeof的结果。
3)this指针是类成员函数的第一个默认隐含参数,因此不需要你显示地传入,你在类成员函数之中可以直接使用this指针。
4)this指针的作用域是在非静态函数的内部,在成员函数(非静态)开始前构造,在成员函数(非静态)结束后消除。(下面会分析为什么是在非静态函数内部才能使用)
5)this指针的传入方式,这里不得不提函数的调用约定_thiscall,如果参数确定,那么this指针是通过ecx传递给被调用者的,若参数不确定,那么this指针在所有参数压入之后在压入。
(_thiscall的调用约定如下:
这 是 C++ 语言特有的一种调用方式,用于类成员函数的调用约定。如果参数确定,this 指针存放于 ECX 寄存器,函数自身清理堆栈;如果参数不确定,this指针在所有参数入栈后再入栈,调用者清理栈。__thiscall 不是关键字,程序员不能使用。参数按照从右至左的方式入栈。
)
6)this指针不能再初始化列表之中使用,原因是在初始化列表之中,类的对象还没有创建,编译器不知道对象的结构,因此不知道应该为其分配多大的空间。
我们就按顺序说起:
一、构造函数
以上是关于C++之中this指针与类的六个默认函数小结的主要内容,如果未能解决你的问题,请参考以下文章