使用operator +而不泄漏内存?

时间:2010-01-18 21:41:31

标签: c++ string operators operator-keyword

所以有问题的代码就是:

const String String::operator+ (const String& rhs)  
{  
    String tmp;  
    tmp.Set(this->mString);  
    tmp.Append(rhs.mString);  
    return tmp;  
}  

这当然会将String放在堆栈上并被删除并返回垃圾。 将它放在堆上会泄漏内存。那我该怎么做呢?

4 个答案:

答案 0 :(得分:11)

如果你有一个工作副本构造函数,你的解决方案不会返回垃圾 - 在块结束时销毁String对象tmp之前将其复制到结果对象中。

您可以通过替换

来做得更好
String tmp;
tmp.Set(this->mString);

String tmp(*this);

(你需要一个正确工作的复制构造函数,但是你的return语句无论如何都需要它)

答案 1 :(得分:4)

根据rule of three,您应该实现复制构造函数,复制赋值运算符和析构函数。然后堆栈分配的临时将安全地复制到接受返回值的存储。

答案 2 :(得分:1)

如果你使用std :: string这既不泄漏也不返回垃圾

你的类有一个复制构造函数(有效)

无论哪种方式它都不会泄漏(除非String的设计非常糟糕,即在调用析构函数时不会释放内部内存)

答案 3 :(得分:0)

没有内存泄漏。但您可能希望将返回类型更改为String而不是“const String”。否则这个功能用处不大