置于运算符重载+语句中时,对象丢失

时间:2015-11-13 05:01:01

标签: c++ operator-overloading

我正在为学校创建一个包含2种数据类型的字符串类,一个int长度和一个char * buf。

其中一个构造函数要求我重载+运算符。

String& operator + (const String& s1, const String& s2){

String equals;
equals.length = s1.length + s2.length;
equals.buf = new char[equals.length + NULL_OFFSET];
strcpy(equals.buf, s1.buf);
strcat(equals.buf, s2.buf);
return equals;
}

我使用以下代码重载了+运算符

   String query = "select User_type from Signup where User_name.User_name="+Userid_input;
   ResultSet rs = st.executeQuery(query);

当调用String u10时,它成功组合了2个String对象并以String equals返回它们。

但是当等于+与“G”时,其内存地址会丢失(或者可能会被删除,我不确定)

1 个答案:

答案 0 :(得分:2)

问题是你返回对堆栈上分配的局部变量的非const引用,当退出声明范围时它变为无效。

但是没有理由返回引用,operator+应该返回一个值,而不是对值的引用:

String operator+(constr String& s1, const String& s2)

因此,您要返回一个全新的对象,这是您对二进制+运算符的期望,引用是对现有对象进行别名的内容,在这种情况下不是这种情况。

operator+=中使用它的情况确实应该返回String&,因为你有效地修改了操作符的左手值。