CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

有关重载赋值运算符的问题.

楼主willingbupt(buptcsdn)2006-03-04 15:04:16 在 C/C++ / 新手乐园 提问

看了一下赋值运算符不是很清楚,为什么还要在第一步比较.下面是它的实现  
  String1   &String1::operator=(const   String1&other)  
  {      
  if(this==&other)  
  {  
  return   *this;  
  }  
  delete   []m_data;  
  m_data=new   char[strlen(other.m_data)+1];  
  strcpy(this->m_data,other.m_data);  
      return   *this;  
  } 问题点数:20、回复次数:8Top

1 楼cxc014(有心插柳柳不活,无心栽花花开花?)回复于 2006-03-04 15:18:03 得分 0

为什么还要在第一步比较  
  =====================  
  是为了防止在自己跟自己赋值时,可能出现的不必要的语句,或是错误.Top

2 楼windindance(风舞轻扬·白首为功名)回复于 2006-03-04 15:19:51 得分 0

可能会有这种代码:  
  String1   s="aaa";  
  s   =   s;  
  如果没有if(this==&other)这行的话,就会有问题了。Top

3 楼dx30611(想要clean code)回复于 2006-03-04 15:24:21 得分 0

如果按照c++默认的方式,只传递了字符串的地址,在内存中只有一个字符串空间,是一种浅拷贝,如果要进行深拷贝产生两个相同的字符串就要按照这种方式编写.Top

4 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 20:13:37 得分 0

if(this==&other)  
  ~~~~~~~~~~~~  
  防止自己给自己赋值的情况。  
   
  楼上windindance,举的例子  
  String1   s="aaa";  
  s   =   s;  
  也许你说不会不会出现这种情况。  
   
  但是  
  string   str   =   "aaa";  
   
  .....  
   
  string   str1   =str;  
   
  ....  
   
  string   str2   =   str1;  
   
  ....  
  str   =   str2;//   如果不做处理,这时候经过多步处理,这时候已经不能明确str2原来是从  
  //   str来的。而这时认为给str赋值str2是正确的,其实是错误。    
  Top

5 楼cunsh(村少)回复于 2006-03-04 20:20:09 得分 0

<<effective   c++>>   的条款17   在operator=中检查给自己赋值的情况.Top

6 楼Duwchy(+U)回复于 2006-03-04 21:23:45 得分 0

<高质量C++/C   编程指南〉9.6节有介绍Top

7 楼wqtl_357(Step By Step!)回复于 2006-03-05 19:38:35 得分 0

防止自己给自己赋值的情况。Top

8 楼windywater(超级宇宙无敌大白痴)回复于 2006-03-06 16:55:08 得分 0

大家说得很详细了。Top

相关问题

  • 重载赋值运算符的问题
  • 关于赋值运算符重载
  • 有关运算符重载
  • "重载构造函数"与"重载赋值运算符"
  • 关于重载赋值运算符!(30分相送)
  • 关于运算符重载,为什么要检查自赋值?
  • 赋值运算符重载的简单问题!
  • 重载运算符
  • 在什么情况下,需要重载一个类的赋值运算符?
  • 有关string中输出运算符<<重载的问题。

关键词

  • 赋值
  • 字符串
  • aaa
  • str
  • 情况
  • data

得分解答快速导航

  • 帖主:willingbupt

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo