破坏本地自动功能变量与构造返回值之间的顺序

Dev*_*ull 3 c++ language-lawyer c++11 c++14 c++17

存在依赖于以下事实的代码:创建返回值后,本地自动函数变量将被破坏,例如:

1)取消std :: type_info :: name的结果

std::string demangle(const char* name)
{
    int status = -4;
    std::unique_ptr<char, void(*)(void*)> res {
        abi::__cxa_demangle(name, NULL, NULL, &status),
        std::free
    };
    return (status==0) ? res.get() : name;
}
Run Code Online (Sandbox Code Playgroud)

2)基于作用域的锁保护和返回值的计时

class C {
    mutable std::mutex _lock;
    map<string,string> deep_member;
public:
    auto get_big_lump()
    {
        std::unique_lock<std::mutex> lock(_lock);
        return deep_member;
    }
};
Run Code Online (Sandbox Code Playgroud)

标准在哪里指定要保证此订单?

son*_*yao 8

[stmt.return] / 3

调用结果的复制初始化在返回语句的操作数建立的全表达式结束时在临时变量销毁之前进行排序,而该操作数又在销毁局部变量([stmt .jump]),其中包含return语句。