在这种情况下会发生什么?
// assume WeakPtr is valid and has not expired
const auto& something = WeakPtr.lock();
something->doStuff();
这是未定义的吗?
这种情况会改变吗?
std::shared_ptr<Something> getSomething() { return mSomething.lock(); }
const auto& something = getSomething();
这是怎么回事?
std::vector<int> getInts() { return std::vector<int>{ 1, 2, 3 }; }
const auto& ints = getInts();
在每种情况下const auto&
意味着我想绑定对象的引用,但在每种情况下我都将它绑定到临时右值对象。我邀请灾难吗?
答案 0 :(得分:1)
这是未定义的吗?
每个案例都有明确的定义。
在这种情况下会发生什么?
在每种情况下,临时对象的生命周期都会延长,以匹配const引用的生命周期,如标准的[class.temporary]部分所述。
[class.temporary](标准草案)
4有两种情况下,临时人员在不同时刻被摧毁,而不是 表达。第一个背景是...... [与您的案例无关]
5第二个上下文是指引用绑定到临时的。引用所在的临时值 绑定或临时,即绑定引用的子对象的完整对象仍然存在 在参考文件的生命周期中,除了...... [一些不适用于您的案例的例外]