比如说我写了一个String类,里面有两个函数
String String::operator =( const char * s )
{
delete [] str;
str=new char [strlen(s)+1] ;//多一位放\0嘛
strcpy(str,s);
return *this;
}
String String::operator =(const String &s)
{
if(this==&s)//判断地址是否相等
{
return *this;
}
delete [] str;
str=new char (strlen(s.str)+1);
strcpy(str,s.str);
return *this;
}
比方说我现在有String e1,e2,e3;
e1="hi"
e2="hello"
它的构造函数和析构函数是这样的
String():str(new char[1])
{
str[0]=1;
}
~String()
{
delete [] str;
}
以及复制构造函数
String(const String &r)//这样临时对象和其指向的就不会是一块地方
{
str=new char[strlen(r.str)+1];
strcpy(str,r.str);
}
那么对于(e3=e2)=e1,e3的str所输出的依旧是hello,在我调试的时候,连续进入重载函数与复制构造函数两次,再调用了析构函数两次,第二次调用析构函数时它提醒SIGTRAP。我觉得应该是第一次返回时创建的临时对象析构的时候找不着了?
刚刚学到运算符重载,不知道如果返回值不是引用,是不是没有办法解决这样的问题