码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-19 13:07:46      阅读:99      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!