首页 > 其他 > 详细

正确地将对象赋值给对象本身了吗?

时间:2015-05-19 13:05:53      阅读:156      评论:0      收藏:0      [点我收藏+]

资料摘自<C++沉思录>

自我赋值常常被错误地应用,考虑下面的一段代码:

class String{

public:

      String & operator=(const String &s);

private:

      char * data;

};

我们会轻易地使用下面的方法来实现赋值:

String &String::operator=(const String & s)

{

      delete [] data;

      data = new char[strlen(s.data)+1];

      strcpy(data, s.data);

      return * this;

}

乍一看,这个方法好像是没有问题的,但是当我们把一个String对象赋给它本身时,这个方法就会彻底失败,因为s和*this都指向同样的对象.

避免这个问题的最简单的方法就是显式地加以预防:

//方案1

String &String::operator=(const String & s)

{

      if(&s != this){

           delete [] data;

           data = new char[strlen(s.data)+1];

           strcpy(data, s.data);

      }

      return *this;

}

//方案2

String &String::operator=(const String & s)

{

      char * newdata = newchar[strlen(s.data)+1];

      strcpy(newdata, s.data);

      delete [] data;

      data = newdata;

      return * this;

}

正确地将对象赋值给对象本身了吗?

原文:http://blog.csdn.net/afei198409/article/details/45842695

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!