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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)