提问者:小点点

从类返回不正确的值


我有以下类:

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);

第一种情况下我做错了什么?


共1个答案

匿名用户

RequestBuilder::getInstance()。url().ToStdString()返回的是一个临时对象,它将在完整表达式之后立即被销毁,在从临时对象获得的指针val变为悬空之后,对它的任何取消引用都将导致UB。

正如您在使用命名变量时所展示的那样,该变量的生存期在其超出作用域时结束,在该作用域中val将保持有效。