gpt4 book ai didi

c++ - 从类返回不正确的值

转载 作者:行者123 更新时间:2023-12-02 10:00:34 27 4
gpt4 key购买 nike

我有以下类(class):

class RequestBuilder : QObject
{
Q_OBJECT
public:
static RequestBuilder& getInstance()
{
static RequestBuilder instance;
return instance;
}
RequestBuilder(RequestBuilder const&) = delete;
void operator=(RequestBuilder const&) = delete;

void setUrl(const QString& url){ url_ = url; };
QString url() const { return url_; };
private:
RequestBuilder(){};
QString url_ = "some_string";
};
1.)当我这样称呼它时,我得到了一些不可读的字节(困惑的输出):
const char* val = RequestBuilder::getInstance().url().toStdString().c_str();
printVal(val);
2)当我这样称呼它时,结果是正确的:
auto string = RequestBuilder::getInstance().url().toStdString();
const char* val = string.c_str();
printVal(val);
我在第一种情况下做错了什么?

最佳答案

RequestBuilder::getInstance().url().toStdString()返回的是一个temporary object,它将在完整表达式后立即销毁,之后,从临时对象获取的指针val会变得悬空,任何对其的取消引用都将导致UB。
正如您在使用命名变量时所展示的那样,该变量的生存期在其超出范围时结束,在该范围内val将保持有效。

关于c++ - 从类返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62694902/

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