1

我有以下自定义String类的代码:

const String &String::operator+(const String &right)
{
   String temp;
   temp.length = length + right.length;
   temp.sPtr = new char [temp.length + 1];
   assert( sPtr != 0 );
   strcpy(temp.sPtr, sPtr);
   strcat(temp.sPtr, right.sPtr);
   return temp;
}

哪里sPtrchar*

但是,当我在两个字符串上执行此函数时,我会得到垃圾字符,如下所示:

 ]√Hâ«Ö“x˘" = "The date is" + " August 1, 1993

我一点也不知道发生了什么。我已经阅读了一些在结果字符串被连接之前得到垃圾字符的人的推荐,但我完全不明白为什么整个字符串都是垃圾字符。

任何帮助都会非常棒。提前致谢!

4

1 回答 1

4

不要通过引用返回“临时”对象。一旦函数结束,临时字符串就会被释放,并且由于字符串被设置为临时地址,它就变成了垃圾。

于 2012-10-25T22:16:46.803 回答