之前一直不能理解this指针到底是什么,即使尝试在自己代码里用了,还是一头雾水,最近把程序搞了个crash出来,gdb看了下帧,打印了下this指针的内容之后,结合之前查到的一些资料,就完全理解了。
于是记录下 自己的理解。用例子来说明。
定义一个命名空间,声明父类Base。
namespace BaseNamespace
{
class Base
{
public:
Base();
virtual ~Base();
virtual int init_human(){return 0;}
void initfunc();
public:
int test1 ;
int test2;
int test3;
private:
const char * test;
};
}
void Base::initfunc(){
this->test1;
}
在类Base里的this指针,指向的其实就是类Base本身,而且只有在类Base里面的非静态成员函数中,例如initfunc(),才能调用访问this指针。
*this={BaseNamespace::Base={_vptr.Base(这里的内容应该还是BaseNamespace::Base)}}
利用this指针可以调用访问initfunc();test1;test2;test3以及test。
再声明一个继承类:
namespace sonBaseNamespace
{
class sonBase : public Base
{
public:
sonBase();
virtual ~sonBase();
int init_human();
public:
int son_test;
private:
const char *son_name;
const char *son_age;
};
}
int sonBase::init_human(){
this->son_age;
this->test1;
return 0;
}
*this={BaseNamespace::Base={_vptr.Base(这里的内容应该是sonBaseNamespace::sonBase)}}
这个this指针可以访问Base以及sonBase中的函数和参数。
==================================================
就是网上搜到的答案,this指针是成员函数所作用的对象(例子里是Base、sonBase)。