读书人

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

发布时间: 2012-05-28 17:59:33 作者: rapoo

重载操作符和拷贝构造一起用出现问题了
#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=返回引用。

读书人网 >C++

热点推荐