this指针
this指针式c++成员函数的隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作都是通过该指针去访问的。
this指针的特性
1.this指针的类型为*const
2.只能在“成员函数”的内部使用
3.this指针本质上是一个成员函数的形参,是对象调用成员函数的时候将对象地址作为实参传递给this形参。所以对象中不存在this指针,而this指针存在于成员函数中作为形参。
4.this指针是一个隐藏的形参,位于形参的第一个位置;this指针存在于栈中,VS中this指针因为经常调用的缘故,VS将其置于ecx寄存器中。
这时有一个问题,既然this是一个指针,那么这个指针能够为nullptr么?
最好不要设置this指针为空指针,因为:
class Person{
public:
void person_des(){
cout << "ok!" << endl;
}
void person_ch(){
cout << name << endl;
}
private:
char* name;
};
int main(){
Person man;
Person *p = NULL;
man.person_des();
man.person_ch();
p->person_des(); //从上到此都没有问题
p->person_ch(); //但是,这个时候就会出现问题
}
为什么最后一个就会出现问题呢?这时因为空指针调用问题的出现,我们知道空指针的地址为0x00,这个地址是存在的,但是这个地址是不能够调用任何变量的(规定),调用的话就会出现错误。
我们使用p->person_des() 其实本质就是 p->person_des(&p) //这不会出现错误,因为仅仅是取地址
而p->person_ch()函数,调用了name变量,着就会出现错误,即出现这样的情况 p->person_ch(&p) cout << *p->name不出错才怪了呢