gpt4 book ai didi

c++ - 如何在 C++ 中将 const ref a 返回给局部变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:09 25 4
gpt4 key购买 nike

我有一个无法更改函数参数的函数。我需要返回对在此函数中创建的 std::string 的 const 引用。我尝试使用 boost shared_ptr,但这不起作用。为什么?我该如何进行这项工作?

const std::string& getVal(const std::string &key) {
boost::shared_ptr<std::string> retVal(new std::string());
... //build retVal string with += operator based on key
return *retVal;
}

最佳答案

您不能使用 C++ 从函数返回对局部变量的引用。尽管在 c++0x 中这是可能的。

在堆上分配字符串,稍后手动清理:

如果无法更改函数的接口(interface),则需要在堆上创建它,然后手动删除它。

//Remember to free the address that getVal returns
const std::string& getVal(const std::string &key) {
std::string *retVal = new std::string();
... //build retVal string with += operator based on key
return *retVal;
}

相同的解决方案,但不是手动:

由于上述如果忘记手动释放最终会导致内存泄漏。我建议将此调用包装到一个类中并使用 RAII。 IE。在构造函数中,调用 getVal 并设置此类的一个成员指向它。在您类(class)的析构函数中,您将删除它。

为什么您使用 shared_ptr 提供的代码不起作用:

shared_ptr 通过引用计数工作。由于您正在销毁唯一的 shared_ptr 对象(按范围),因此没有引用剩余并且内存将被释放。要让它工作,你必须返回一个 shared_ptr,但你说你不能这样做。

关于c++ - 如何在 C++ 中将 const ref a 返回给局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636755/

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