首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

重载操作符和拷贝构造一起用出现有关问题了

2012-05-28 
重载操作符和拷贝构造一起用出现问题了#includeiostreamusing namespace stdclass MyString{public:MyS

重载操作符和拷贝构造一起用出现问题了
#include<iostream>
 using namespace std;
 class MyString{
  public:
  MyString(char*s){
  str=new char[strlen(s)+1];
  strcpy(str,s);
  }
~MyString(){
  delete[]str;
  }
  MyString operator+(MyString &string){
  char*temp=str;
  str=new char[strlen(temp)+strlen(string.str)+1];
  strcpy(str,temp);
  delete[]temp;
  strcat(str,string.str);
  return *this;
}
  MyString (const MyString&string){
  str=new char[strlen(string.str)+1];
 strcpy(str,string.str);
 }
friend ostream&operator<<(ostream&os,MyString&string);

 private:
 char*str;
 };
 ostream&operator<<(ostream&os,MyString&string){
  return os<<string.str<<endl;
  }
int main(){
  MyString a("hello");
  MyString b("world");
  MyString c("");
  c=a+b;
  cout<<c<<endl;
  return 0;
  }

重载操作operator+没有返回类的引用,析构中释放内存,出现释放两次同一片内存,但是我自定义了拷贝构造函数啊,为什么还是出现了这个情况,求指教



[解决办法]
c=a+b;
没有重新定义赋值运算符,采用编译默认的话,c对象的str成员与a对象的str是同样的值,未进行深度拷贝。
[解决办法]
还得重载operator=返回引用。

热点排行