为什么这不会创建悬空引用?
我认为 VS2019 建议会创建一个悬空的参考情况,但我对其进行了测试,它似乎有效。这里发生了什么?
template<typename MessageType>
class Queue {
inline static std::vector<MessageType> messages;
public:
static bool isEmpty() {
return messages.size() == 0;
}
template <typename... Args>
static void emplace(Args&&... args) {
messages.emplace_back(std::forward<Args>(args)...);
}
static MessageType pop() {
auto const& val = messages.back();
messages.pop_back();
return val;
}
};
看起来最后一条消息存活的时间足够长,可以复制到返回值中。这是好的做法吗?