存在一些代码,该代码依赖于局部自动函数变量在返回值创建后被销毁的事实,例如:
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;
}
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;
}
};
这个标准在哪里规定了这个顺序是有保障的?