Referenz auf eigenes Objekt im Konstruktor übergeben



  • Hi, ist das hier erlaubt?

    class Foo;
    
    class Bar
    {
    public:
    	Bar(Foo& foo)
    		: foo_(foo)
    	{
    	}
    private:
    	Foo& foo_;
    };
    
    class Foo
    {
    public:
    	Foo()
    		: bar_(*this)
    	{
    	}
    private:
    	Bar bar_;
    };
    
    int main()
    {
    }
    

    Im Forum gab es glaube ich schon einen Beitrag darüber, aber mit Zeigern anstatt Referenzen. Dort stand dann das es erlaubt ist solange man den Zeiger nur für die spätere Verwendung speichert. Gilt das auch bei Referenzen? Ich bin mir etwas unsicher weil ich ja den this-Zeiger ja schon dereferenziere (mit *this). 🙄 Darf man das?



  • [EDIT]



  • Mein Gefühl sagt mir, dass es OK ist.
    Denn du rufst ja keine Member oder ähnliches auf - du dreferenzierst den Zeiger zwar, aber es findet dann ja keine Kopie statt.



  • VC++ gibt lediglich in der Zeile Foo() : bar_(*this) die Warnung: 'this' used in base member initializer list
    Funktioniert aber alles genau so, wie beabsichtigt (solange man im Bar-Ktor nicht irgendwelche Foo-Elemente anspricht).



  • Weiß das denn jemand ganz genau das der Code okay ist? Ich muss mir nämlich 100 % sicher sein. 😋


Anmelden zum Antworten