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

关于运算符重载,为什么要检查自赋值?

楼主quicking(-_-#)2002-04-14 04:40:13 在 C/C++ / C语言 提问

如题。  
  在重载赋值运算符时,通常要检查自赋值。(见c++编程思想)  
  为什么?书上说,自赋值有时会产生灾难性的后果,我没有见过,也想象不出来。谁可以解释一下?  
  谢谢! 问题点数:50、回复次数:6Top

1 楼Koorama(顺)回复于 2002-04-14 07:45:08 得分 10

为了避免把自己覆盖  
  对象被赋值前要释放自己的空间,赋值后就变成指向未分配空间的垂悬指针。  
  (详见林锐的《高质量C++编程》,清晰易懂)Top

2 楼babysloth(小懒虫虫)回复于 2002-04-14 09:56:55 得分 10

见Effective   C++   Item   17  
  例如  
  class   A  
  {  
  private:  
      char*   val_;  
  public:  
      A&   operator   =(const   A&   v)  
      {  
          delete   val_;  
          val_   =   new   char[strlen(v.val_)   +   1];  
          strcpy(val_,   v.val_);  
          return   *this;  
  };Top

3 楼cssnow()回复于 2002-04-14 10:43:05 得分 0

完全赞同楼上的!babysloth(小懒虫虫)   释放自己后还要用自己!Top

4 楼zxy_zs(STL&C++)回复于 2002-04-14 10:58:33 得分 20

如果不进行自我赋值检查。就有可能出现一种情况。那是灾难性的。举例说。你在拆房子。如果你不先看看自己是否在房子里就直接拆了。那会是怎么样呢??想想就知道。Top

5 楼Betta(小新)回复于 2002-04-14 11:50:50 得分 0

在debug版本时   assert   一下赋值的参数不是this,   或添加是否同  
  一对象的比较函数  
   
  release版本就不必了,毕竟这是外部程序错误引起的  
  Top

6 楼swordkee(天天向上)回复于 2002-04-14 12:13:22 得分 10

shallow   copy后但是desctractor调用两次,就会删除未知的空间,危险.Top

相关问题

  • 重载赋值运算符的问题
  • 关于赋值运算符重载
  • "重载构造函数"与"重载赋值运算符"
  • 关于重载赋值运算符!(30分相送)
  • 赋值运算符重载的简单问题!
  • 重载运算符
  • 在什么情况下,需要重载一个类的赋值运算符?
  • 怎样重载(),[],=运算符
  • 如何重载+运算符?
  • 关于运算符重载。。

关键词

  • c++编程
  • 赋值
  • val
  • 空间

得分解答快速导航

  • 帖主:quicking
  • Koorama
  • babysloth
  • zxy_zs
  • swordkee

相关链接

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

广告也精彩

反馈

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