if(this == &rhs)中为什么有个“&”?

紫色动力 2010-04-18 10:58:25
这是一个运算符重载中的一句,不能自己给自己赋值。部分代码如下:

template<typename T>
miniList<T>& miniList<T>::operator=(const miniList<T> &rhs)
{
// can't assign list to itself
if(this == &rhs)//为什么有个引用符?

……

}

rhs本来就是引用,还要再引用下?
...全文
255 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Longerandlonger 2010-04-18
  • 打赏
  • 举报
回复
this是指针,rhs是对象,可以吧“&rhs”当做“指向rhs的指针”。
Longerandlonger 2010-04-18
  • 打赏
  • 举报
回复 1
这个昨天看了,我来说说吧。

假设声明了一个类A,并实现了两个A类的对象a,b。在a,b的构造函数中,都使用了动态内存,即执行了new命令。

现在要执行赋值运算 a=b ,该语句第一步应该是销毁a,并释放a的动态内存。第二步是将b的数据成员赋给a。

好了,那么如果执行 a=a 会怎么样呢?先销毁a,再把a的数据成员赋给?但a首先被销毁了!!!这样第二步就无法执行了!!!

所以,在重载赋值符号’=‘的时候,首先要检查’=‘右边的对象是否就是左边的对象。

该怎么检查呢?就用这个语句: if(this == &rhs)。在执行 a=b 的时候,this指向a,rhs就是b。
jack_doson 2010-04-18
  • 打赏
  • 举报
回复
防止自己拷贝自己,林锐的 书上的吧
BillLeecn 2010-04-18
  • 打赏
  • 举报
回复
this 是指向对象本身的指针,也就是说, this 实际是一个对象本身的地址
而 & 是取地址的操作符,&rhs 就是 rhs 的地址,也就是说, &rhs 就是指向 rhs 的指针
注意, & 在声明变量时是 引用,但在这里是 取地址的操作符
这个判断是用来防止一个对象对自己进行赋值
liyanlin122 2010-04-18
  • 打赏
  • 举报
回复
this是个指针,
用this指向rhs
昵称很不好取 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 purplepower 的回复:]
那就是说this中保存的地址是不是rhs的地址,对吧,呵呵!:-D
[/Quote]
恩,如果this和&rhs的地址一样,那说明传进来的对象就是自身,就不需要操作了
紫色动力 2010-04-18
  • 打赏
  • 举报
回复
那就是说this中保存的地址是不是rhs的地址,对吧,呵呵!:-D
昵称很不好取 2010-04-18
  • 打赏
  • 举报
回复
就是比较两个地址,防止参数就是自己
紫色动力 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
这是取地址,因为this 是指针,也是地址
[/Quote]
this == &rhs

比较的是两指针的值,而不是指向的内容?
yxriyin 2010-04-18
  • 打赏
  • 举报
回复
这个就像
int *p;
int q;
p=&q一样的道理
this是指向该类的指针
rhs是一个对象,
两个要进行比较需要this和&rhs才有意义。。。
小李子 2010-04-18
  • 打赏
  • 举报
回复
this是指针
wuyu637 2010-04-18
  • 打赏
  • 举报
回复
引用取指针就是这么用的

这里的参数是一个引用
昵称很不好取 2010-04-18
  • 打赏
  • 举报
回复
这是取地址,因为this 是指针,也是地址
pengzhixi 2010-04-18
  • 打赏
  • 举报
回复
取地址啊,避免自己给自己赋值的时候析构了自己.
yxx19901124 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liyanlin122 的回复:]
this是个指针,
用this指向rhs
[/Quote]
就是 这样

64,634

社区成员

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

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