临时对象的生命周期:嵌套函数调用中临时向量的迭代器

Posted

技术标签:

【中文标题】临时对象的生命周期:嵌套函数调用中临时向量的迭代器【英文标题】:Lifetime of temporary object: iterator to temporary vector in nested function call 【发布时间】:2015-10-21 15:17:49 【问题描述】:

假设我有这样的类:

struct QString 
    //return null terminated array
    std::vector<char> toLocal8Bit() const;
;

struct string_view 
    const char *data;
    size_t len;
    string_view(const char *str): data(str), len(std::strlen(str)) 
;

我有这样的签名功能:

void f(const string_view& str);

它是有效的代码

QString str;
f(string_view(&*str.toLocal8Bit().begin()));

?

我的意思是临时 std::vector 什么时候会被销毁?

【问题讨论】:

【参考方案1】:

临时在完整语句的末尾被销毁。所以这是安全的。

【讨论】:

但是这里实际上是两个嵌套临时的,它们会以相反的顺序被销毁? 这里没关系。重要的是,当第二个临时对象被构造时,第一个临时对象仍然存在。

以上是关于临时对象的生命周期:嵌套函数调用中临时向量的迭代器的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们可以非常量引用临时对象并延长其生命周期?

临时人员的 C++ 生命周期 - 这安全吗?

临时子表达式的临时生命周期,绑定到引用

如何在不创建临时对象的情况下迭代嵌套的 TreeMap

六 领域驱动设计-领域对象的生命周期

临时变量的解说和验证