Pregunta

Tengo este código de ejemplo:

struct A
{
    bool test() const
    {
        return false;
    }
};


template <typename T = A>
class Test
{
public:
    Test(const T& t = T()) : t_(t){}

    void f()
    {
        if(t_.test())
        {
            //Do something
        }
    }
private:
    const T& t_;
};

int main()
{
    Test<> a;
    a.f();
}

Básicamente estoy preocupado por el constructor de Test donde estoy almacenando una referencia constante a una variable temporal y usarlo en f methof. ¿La referencia a un objeto temporal sigue siendo válida dentro f?

¿Fue útil?

Solución

No va siendo válidas. El objeto temporal será destruido después de inicializar a. En el momento en que se llama a f invocación de un comportamiento indefinido llamando test. Sólo es válido lo siguiente:

// Valid - both temporary objects are alive until after the 
// full expression has been evaluated.
Test<>().f();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top