1、为什么会有this指针?

在C语言中,我们每定义一个函数变量,就会开辟一块内存;那在C++中呢,我们定义一个类的若干对象,系统就会为每一个对象分配存储空间。如果一个类包含数据成员和成员函数,就要分别为数据和函数代码分配存储空间。这样造成了很多没有必要的空间浪费。
所以在C++中,一个类的不同对象的数据代码都有各自的存储空间,但是一个类的不同对象的成员函数代码是公用的一块空间。那既然是公用的成员函数,那么成员函数是怎样辨别出当前调用自己的是哪个对象,从而对该对象的数据成员而不是其他对象的数据成员进行处理呢?
所以就有了this指针。

2、this指针的作用

C++编译器给每个成员函数增加了一个隐藏的指针参数,让该指针指向函数运行时调用该函数的对象,在函数体中所有成员变量的的操作,都是通过该指针去访问的,这不需要用户,编译器自动完成。

3、this指针类型

类类型* const
4、this指针只能在“成员函数”内部使用。
5、this指针本质是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this指针,所以对象不存储this指针

面试题:

1、this指针存放在哪里?
this指针是成员函数第一个隐含的指针形参,一般由编译器通过ecx寄存器(VC++编译器)自动传递。所以this指针VC++编译器是存放ecx寄存器中,其它编译器有可能不同
2、this指针可以为空吗?
this指针是指向函数运行时调用该函数的对象,如果在成员函数中只是想打印一句话或者没有指向对象需要操作时,this指针是可以为空的,但是如果有需要指向操作的对象,此时this指针为空就会导致出错(空指针引用)。
3、运行下面程序会崩溃吗?在哪里崩溃 ?
【C++】详细了解this指针
会在p->PrintA();处崩溃,因为p是一个空指针,当它指向PrintA()这个函数时,就相当于this指针为空当它访问成员变量_a时,会进行解引用,程序会崩溃。而在Show()函数中,没有需要指向操作的成员变量,所以这句是可以执行成功的。

相关文章: