this指针

this指针指向对象的地址,本身是一个常量指针MyClass *const this,也就是不能改变指向的对象。

this指针是在创建对象前就有了,在编译时刻已经确定,this指针放在栈上。当一个对象创建后,整个程序运行期间只有一个this指针.

我是这样理解类和this指针的:类相当于房子的户型,根据这个户型可以造出很多房子,这就相当于对象。每个房子的地址不同,这就相当于内存地址。当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。this就是房子里面的一个标识,说明了房子的地址,但这个标识又不占房子空间。

this指针不属于对象本身的一部分,不会影响sizeof作用。 顺便一提,一个空的类,sizeof的大小是1

this指针是编译器默认传给类中非静态函数的隐含形参,其作用域在非静态成员函数的函数体内。
在类的赋值运算符重载函数中,我们可以一般使用*this作为当前对象返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Base
{
public:
Base();
void test();
void test_pub();
}
//相当于void Base::test(Base* const this)
void Base::test()
{
std::cout<<this<<endl;
cout<<"base test"<<endl;
}
void Base::test_pub()
{
std::cout<<this<<endl;
cout<<"base test_pub"<<endl;
}

调用两函数的结果:

1
2
3
4
00DDF9A0
base test
00DDF9A0
base test_pub

也就是说运行时只有一个this指针。