从 class 返回不正确的值
Returning incorrect value from class
我有以下 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()
returns是一个temporary object,它会在完整的表达式后立即被销毁,之后从临时得到的指针val
变成悬挂的,对它的任何取消引用都会导致 UB。
正如您在使用命名变量时所展示的那样,其生命周期在超出范围时结束,其中 val
将保持有效。
我有以下 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()
returns是一个temporary object,它会在完整的表达式后立即被销毁,之后从临时得到的指针val
变成悬挂的,对它的任何取消引用都会导致 UB。
正如您在使用命名变量时所展示的那样,其生命周期在超出范围时结束,其中 val
将保持有效。