A!ive 2020-03-21 20:54 采纳率: 50%
浏览 345

请问C++中非引用的对象作为函数返回值返回的时候,作为左值时候的问题

比如说我写了一个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。我觉得应该是第一次返回时创建的临时对象析构的时候找不着了?

刚刚学到运算符重载,不知道如果返回值不是引用,是不是没有办法解决这样的问题

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-21 21:49
    关注

    (e3=e2)=e1
    这个表达式的左边编译器会产生一个临时引用,这么写没有什么实际意义
    你想做什么呢

    评论

报告相同问题?

悬赏问题

  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?