实现=操作符时判断自己给自己赋值

来源:互联网 发布:淘宝运营kpi考核指标 编辑:程序博客网 时间:2024/05/22 07:55
// 忽略了给自己赋值的情况
// 的赋值运算符
string& string::operator=(const string& rhs)
{
  delete [] data;    // delete old memory

  // 分配新内存,将rhs的值拷贝给它
  data = new char[strlen(rhs.data) + 1];
  strcpy(data, rhs.data);

  return *this;      // see item 15

}

c& c::operator=(const c& rhs)
{
  // 检查对自己赋值的情况
  if (this == &rhs) return *this;

  ...


  在没有判断自己给自己赋值的时候,释放以前的内存时,重新分配,再将原来的数据COPY过来,但是此是原来的数据被释放掉了,这样就丢失了数据,新分配的内存里的数据是不确定的。
原创粉丝点击