Frage

Ich habe diesen Beispielcode:

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();
}

Im Grunde bin ich über den Konstruktor Test besorgt, wo ich eine konstante Referenz auf eine temporäre Variable bin zu speichern und in methof f verwenden. Wird der temporäre Objektverweis bleibt gültig innerhalb f?

War es hilfreich?

Lösung

Es wird nicht gültig sein. Das temporäre Objekt wird nach der Initialisierung a zerstört werden. Zu der Zeit, rufen Sie rufen Sie auf undefiniertes Verhalten f von test aufrufen. Nur folgendes gilt:

// Valid - both temporary objects are alive until after the 
// full expression has been evaluated.
Test<>().f();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top