gpt4 book ai didi

c++ - 使用 operator+ 而不会泄漏内存?

转载 作者:太空狗 更新时间:2023-10-29 19:40:02 25 4
gpt4 key购买 nike

所以有问题的代码是这样的:

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

这当然会将字符串放在堆栈上,它会被移除并返回垃圾。并将其放在堆上会泄漏内存。那么我应该怎么做呢?

最佳答案

如果您有一个有效的复制构造函数,您的解决方案不会返回垃圾 - String 对象 tmp 在 block 结束时被销毁之前被复制到结果对象中。

你可以通过替换来做得更好

String tmp;
tmp.Set(this->mString);

String tmp(*this);

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

关于c++ - 使用 operator+ 而不会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com