为被销毁的东西分配C++ out引用?

Pol*_*878 1 c++ stl pass-by-reference

所以我正在查看一些代码,我看到了这个:

class whatever 
{
public:
    void SomeFunc(SomeClass& outVal)
    {
        outVal = m_q.front();
        m_q.pop();
    }

private:
    std::queue<SomeClass> m_q;
};
Run Code Online (Sandbox Code Playgroud)

这似乎不再是outVal将是一个有效的参考...但是,它似乎工作.

我之前也在其他代码中看过这个,这个有效吗?谢谢

Cra*_*rks 6

请记住,引用不像指针:它们在创建后不能反弹.这意味着,如果我这样做

int a;
int b;
int &c = a;
Run Code Online (Sandbox Code Playgroud)

然后在整个范围内,对c的赋值实际上意味着对a的赋值.所以,

int a = 2;
{
   int b = 3;
   int &c = a;
   c = b;
   b = -5;
}
printf("%d",a); // prints "3".
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,引用不是指向已删除的对象.相反,返回值m_q.front()复制到通过赋值运算符任何outVal引用.