CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于C++中的自我赋值的问题

楼主blue_water(蓝色瀑布)2001-06-14 00:29:00 在 C/C++ / C语言 提问

我看到很多成员函数,尤其是重载运算符的成员函数,都要判断是否自我赋值,C++编程思想上解释好象是防止产生什么?大家给我个解释. 问题点数:30、回复次数:6Top

1 楼GRIEG(丁丁)回复于 2001-06-14 08:51:00 得分 10

String::String::operate   =(const   String   &other)  
  {  
          if   (this   ==   &other)   return   *this;  
          delete   []m_date;//需要判断的原因,将自己的原来数据删除  
          int   length   =   strlen(other.m_data);  
          m_data   =   new   char[length+1);  
          strcpy(m_data,   other.m_data);  
          return   *this;  
  }  
   
  所以当出现  
  b=a;  
  c=b;  
  a=c;(自复制时不会删除自身)  
   
  Top

2 楼myan()回复于 2001-06-14 09:17:00 得分 5

也不光是出于安全考虑,效率上也大大提高。Top

3 楼holyfire(谁最衰啊你最衰,谁最帅啊我最帅)回复于 2001-06-14 09:22:00 得分 5

消除了一些隐患吧,就算你再注意,给自己赋值会出现什么情况也很难说,特别是在一个特殊的复杂的表达式中出现的话。Top

4 楼cber(cber)回复于 2001-06-14 11:59:00 得分 10

Herb   Sutter在XC中批判了GRIEG(丁丁)的那种写法,因为那样做会导致exception-unsafe,如果想要exception-safe的话,可以试一试使用swap的技巧,大概如下:  
  A&   A::operator=(const   A&   other)  
  {  
  A   tmp(other);  
  swap(*this,tmp);  
  return   *this;  
  }  
  这样就可以了,甚至不用去判断是否自我赋值.不过对于对象很大的情况下,判断一下会比较高效一点;-)Top

5 楼blue_water(蓝色瀑布)回复于 2001-06-15 20:19:00 得分 0

我想了一下,终于明白了,谢谢各位了。每个人加30分!!!  
  谢谢CHER的写法。!!!Top

6 楼blue_water(蓝色瀑布)回复于 2001-06-15 20:20:00 得分 0

不好意思,我以为可以给每个人30分呢,只好将就了。Top

相关问题

  • c++builder中如何赋值?
  • 关于C#中赋值的基础问题/C++比较
  • 急:C++中的对象间能否直接赋值?
  • c++中数组之间为什么不能互相赋值?
  • c语言中,给字符数组(字符串)赋值问题?
  • C#中如何判断一个变量没有被赋值?
  • C#中这样的字符串如何赋值?
  • 如何在c++中进行二维数组的随机赋值
  • Thinking in C++ 中static const变量的赋值问题
  • C/C++程序中的一个小问题,关于指针赋值的

关键词

  • 赋值
  • 判断
  • 出现
  • data

得分解答快速导航

  • 帖主:blue_water
  • GRIEG
  • myan
  • holyfire
  • cber

相关链接

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

广告也精彩

反馈

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