一个关于赋值函数的小问题?

broadarms 2004-11-19 12:01:01
//赋值函数实现如下
String & String::operator = (const String &other)
{
if(this==&other)
return *this;

delete [] m_data;

int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data,other.m_data);

return *this;

}

问题:1)this是什么?
2)if(this==&other) 这句我不太懂,书上讲是检查自赋值。
自赋值是什么意思?什么情况下会出现这种情况?这种可能性大不大?

向每一位回帖的同志致以崇高的敬意,并祝你今天快乐,明天我管不着了:)
...全文
107 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
love830315 2004-11-19
  • 打赏
  • 举报
回复
(this==&other)
this是指向自己这个对象的指针.&other是指向传过来对象的指针.
上面那句是判断他们是不是同一个对象.如果是直接返回*this.不是再进行赋值.也就是防止自赋值了.
broadarms 2004-11-19
  • 打赏
  • 举报
回复
懂了,谢谢各位,chenmq181的 Instance的解释比较容易懂,呵呵~
chenmq181 2004-11-19
  • 打赏
  • 举报
回复
1.this 就是指向当前对象实例(Instance)的指针
2.自我赋值就是自己赋值给自己啊!
比如 a = a;
这种情况要避免,在某些编译器下面可能会出错。详细刚刚Effective C++,N久没碰C++了
fancard 2004-11-19
  • 打赏
  • 举报
回复
1)每个类成员函数都含有一个指向被调用对象的指针,这个指针就是this.
2)this指针含有被调用的类对象的地址,如果other指向的对象的地址和this指针值相等,则other和this指向同一个对象,直接返回,拷贝动作是不必要的。
由于涉及到资源的释放问题,这一步判断是必须的。
sms88 2004-11-19
  • 打赏
  • 举报
回复
自赋值就是自己对自己赋值
比如
a=a;
在你的String & String::operator = (const String &other)这个函数中
this就代表等式左边的a, other就是你等式右边的a
如果不对if(this==&other)return *this;进行判断的话。delete [] m_data;就把数据给删除了,就是说a当中没有了数据
oo 2004-11-19
  • 打赏
  • 举报
回复
1)this是什么?

如果:string str1;
string str2;
str1 = str2;那this就是 &str1;
str2 = str1; 那this就是 &str2;

2)if(this==&other) 这句我不太懂,书上讲是检查自赋值。
自赋值是什么意思?什么情况下会出现这种情况?这种可能性大不大?

str1 = str1;
可能性就不好说了。
fancard 2004-11-19
  • 打赏
  • 举报
回复
效率考虑,如果不用引用传递参数,按值传递会有临时对象的构造,效率低,函数也不能那么写了。
烂笔头Danky 2004-11-19
  • 打赏
  • 举报
回复
我前两天刚好看到这样的重载赋值操作符,刚好也是(this==&other)这里不太明白,刚好看到楼主问这个问题,所以在此想请问大家这里怎么要使用&other呢而不直接使用other呢?

64,651

社区成员

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

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