gpt4 book ai didi

c++ - 保留临时 std::string 并返回 c_str() 以防止内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 15:15:46 24 4
gpt4 key购买 nike

我发现自己在下面使用这种类型的代码来防止内存泄漏,它在性能、安全性、风格或......方面有什么问题吗?

我的想法是,如果我需要返回一个编辑过的字符串(就 c 字符串而不是 std::string 而言),我会使用一个临时的 std::string 作为助手并将它设置为我想要返回的内容成为并保持那个临时的存在。

下次我调用该函数时,它会将临​​时值重新设置为我想要的新值。由于我使用返回的 C 字符串的方式,我只读取返回值,从不存储它。

此外,我应该提一下,std::string 是一个实现细节,不想公开它(所以不能返回 std::string,必须返回 c-string)。

无论如何,这是代码:

 //in header
class SomeClass
{
private:
std::string _rawName;

public:
const char* Name(); // return c-string
};

//in cpp file
std::string _tempStr; // my temporary helper std::string

const char* SomeClass::Name()
{
return (_tempStr = "My name is: " +
_rawName + ". Your name is: " + GetOtherName()).c_str();
}

最佳答案

这是一个错误。如果将指针作为返回值传递,则调用者必须保证该指针在必要时保持有效。在这种情况下,如果所属对象被销毁,或者如果第二次调用该函数导致生成新字符串,则指针可能会失效。

您想要避免一个实现细节,但您正在创建一个比您想要避免的实现细节更糟糕的实现细节。 C++ 有字符串,使用它们。

关于c++ - 保留临时 std::string 并返回 c_str() 以防止内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33659609/

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