找回密码
 立即注册
收起左侧

C++老鸟日记017 this指针

3
回复
7447
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-9-10 10:13:09 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 baizy77 于 2018-10-1 20:50 编辑

版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org
作者: 女儿叫老白 (白振勇)
转载请注明出处!
---------------------------------------------------------------------------------------------------------------------
本套课程属于:《C++跨平台开发干货》系列课程。
-----------------------------------------------------------------------------

引言
---------------------------------------------------------------------------
       说到this指针,大家可能既陌生又熟悉,那么this指针到底是干啥用的,使用时又要注意些什么呢?

正文
---------------------------------------------------------------------------
在C++中提供了this指针来访问对象自身。那么,在开发的时候我们一般会在什么情况下会用到this指针呢?
一种情况是在调试的时候,比如在调试一个堆栈的时候。如果当前堆栈处于某一个类的接口内部,那么我们就可以通过打印或者查看this指针的值来确定当前对象的地址,进而判断其是否合法。比如:
void CMyClass::getValue()
{
     // 如果堆栈执行到该接口内部,那么我们就可以在该接口内部打印this指针。
       // 在visualstudio 的 IDE环境中可以添加监视。
       // 在gdb的堆栈调试中,可以直接打印:print this
}
第二种情况是赋值构造函数中,比如下列函数的最后一句代码:
CMYClass& operator=(const CMYClass & right) {
       if (this != &right)   {
              xxx =right.getxxx();
              yyy = right.getyyy();
       }
       return *this;
}
       再就是类的const成员函数调用非const成员函数时,编译器会报错。比如:
       //@ myclass.h
       class CMyClass {
       ……
       public:
              int getValue() const;
              int calculateValue() { m_nValue ++;}
       private:
              int m_nValue;
};
//@ myclass.cpp
       int CMyClass::getValue() const {
              return calculateValue();
}
       如果按照上面的代码进行编程,编译器会报错:
       有两种方式消除编译错误:
       1. 将getValue()的const限定符去掉。
       2. 将getValue()改为:
int getValue(){return m_nValue;}
然后由调用者自行调用calculateValue()和getValue()。

回复

使用道具 举报

累计签到:50 天
连续签到:1 天
2018-9-11 09:53:52 显示全部楼层
老师你好。
   这句话没有理解。
  那么我们就可以通过打印或者查看this指针的值来确定当前对象的地址,进而判断其是否合法?
   合法性判断是怎么判断的?
回复 支持 反对

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-9-11 11:03:20 显示全部楼层
tan 发表于 2018-9-11 09:53
老师你好。
   这句话没有理解。
  那么我们就可以通过打印或者查看this指针的值来确定当前对象的地址,进 ...

如果this指针=0,那么肯定是非法的。如果this指针显示的成员变量是非法数据(用IDE环境的监视功能)那么也可以判断this非法或已被析构。

点评

tan
这样塞。 谢谢。  发表于 2018-9-12 10:03
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了