关于this的指向问题

cobra_chen 2010-08-12 07:01:48
void CFOME::Clear()
{
memset(this,0,sizeof(ADD_NET);
}

ADD_NET是个结构体

那么这个Clear()是为了清空ADD_NET的数据?
那这个this指向什么?

这样用this有点晕,这个有什么好处么?
还有看到有用this做参数传递的。那这个传的就是那个类?

有点晕了。
...全文
306 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2010-08-18
  • 打赏
  • 举报
回复
呃,C程序员直接用C++写的C代码真是惨了点。
cnpws 2010-08-18
  • 打赏
  • 举报
回复
this就是当前对象的指针,用多了就能理解了。
jerry4805971 2010-08-18
  • 打赏
  • 举报
回复
真服了,对this进行memset,想搞什么啊
jlyong2122 2010-08-17
  • 打赏
  • 举报
回复
学习 。。。。。。。。。
yngaocn 2010-08-17
  • 打赏
  • 举报
回复
每个成员函数都有一个隐含的形参:this,表示该类的指针,是一个const指针,
如果成员函数是非const,则this是指向非const的const指针
如果成员函数是const,则this是指向const的const指针,即:该指针不能改变,且该指针指向的对象也不能改变。

memset(this,0,sizeof(ADD_NET);是将this地址开始,大小为sizeof(ADD_NET)的内存空间清空为0
xl1016807272 2010-08-16
  • 打赏
  • 举报
回复
冒个泡
arong1234 2010-08-16
  • 打赏
  • 举报
回复
写这种代码的人是垃圾,除了降低可读性和增加错误可能性之外,没有什么特别的好处
yangxingya212 2010-08-16
  • 打赏
  • 举报
回复
类的成员函数的参数中都会隐藏一个this指针(除了静态的成员函数)作为参数,它其实就是一个指向该类本身的指针
RLib 2010-08-14
  • 打赏
  • 举报
回复
this指针是非静态成员函数的隐含形参,是对象本身的引用。
既然是形参,就可以向其他指针一样用,这只是一个局部变量(不会是按引用传值吧)。然而指向的目标是不会改变。
有错别找我
y7501272 2010-08-14
  • 打赏
  • 举报
回复
this 指针所指向的地址就是本对象数据成员在内存中的起始地址(前提是没有虚函数哈)

至于这个this指针 有点神奇的 我也解释不太通
一般书上都说的this指针指向的是本对象(话是没错 看个人理解)

class CShape
{
int m_color;
public:
void setcolor(int color){m_color=color;}
};
经过编译器编译之后 其实是:
class CShape
{
int m_color;
public:
void setcolor(int color,(CShape *)this){this->m_color=color;}
};
摘自候俊杰 《深入浅出MFC》53页

楼主自己理解一下this指针的含义




lovestefanie 2010-08-13
  • 打赏
  • 举报
回复
是不能修改还是修改了会出问题?
管哥的天下 2010-08-13
  • 打赏
  • 举报
回复

this是个const指针,怎能修改?
this 指的类对象本
jackyjkchen 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 cobra_chen 的回复:]
什么样的隐患呢?


引用 5 楼 demon__hunter 的回复:
this指针始终指向当前对象的首地址。
memset(this,0,sizeof(ADD_NET);不要这样初始化,如果ADD_NET里有虚函数,那么程序有很大的隐患了。
[/Quote]
虚函数表被覆盖了
cobra_chen 2010-08-13
  • 打赏
  • 举报
回复
什么样的隐患呢?

[Quote=引用 5 楼 demon__hunter 的回复:]
this指针始终指向当前对象的首地址。
memset(this,0,sizeof(ADD_NET);不要这样初始化,如果ADD_NET里有虚函数,那么程序有很大的隐患了。
[/Quote]
zou_cplus 2010-08-13
  • 打赏
  • 举报
回复
memset(this,0,sizeof(ADD_NET);
this的值是不能被改变的 但是 memset 改变this的值吗?
这句话的意思 是 this指向首地址的sizeof(ADD_NET) 内的内存全部清0
要是有虚函数的话 VC编译器的类地址的前面4个字节是 代表虚函数地址 还有多重继承的时候 虚继承的时候 类的数据成员的 内存模型是不一样的 除非你很清除他的内存结构 要不最好不要这么写
GingerJWS 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 demon__hunter 的回复:]

this指针始终指向当前对象的首地址。
memset(this,0,sizeof(ADD_NET);不要这样初始化,如果ADD_NET里有虚函数,那么程序有很大的隐患了。
[/Quote]

up
Erorr 2010-08-13
  • 打赏
  • 举报
回复
特殊情况的特殊技巧吧
搞清楚后记得加上注释
const指针指向的对象还是可以设置的
蜥蜴枪王 2010-08-13
  • 打赏
  • 举报
回复
this指针是const、不能修改...
我也要好好琢磨琢磨...
hustwbno1 2010-08-13
  • 打赏
  • 举报
回复
this指针是指向该类的首地址。是不能修改的
xiaoRainie 2010-08-13
  • 打赏
  • 举报
回复
这样是改变了类内部成员的数据
memset(this,0,sizeof(ADD_NET);
改变的是this指针指向的内容,而不是this指针的指向,另外this指针的指向是没办法修改的
加载更多回复(12)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧