Sichtbarkeit von Variablen



  • Hallo,

    ich habe ein kleines Problem bei dem ich nicht weiter komme:
    ich will in einem try{} catch{} Block eine Instanz einer von mir geschriebenen Klasse initialisieren. Dieses Objekt ist ja nur in dem try{} Abschnitt sichtbar. Wie kann ich jetzt ausserhalb dieses try{} blockes auf dieses Objekt zugreifen?
    Ich habe versucht, es am Anfang zu deklarieren und erst später zu initialisieren, was aber leider nicht funktioniert hat.
    Bin für jeden Ratschlag dankbar.

    Bis dann
    bo53



  • du übergibst dem catch block das objekt über throw()



  • das geht leider nur mit Zeigern:

    Foo* foo;
    try
    {
      foo=new Foo(bar);
    }
    catch(...)
    {}
    
    foo->bla;
    
    delete foo;
    

    Am besten noch in einen smartpointer kapseln. wenn es am stack liegen soll, dann geht das ganze auch noch mit placement new...



  • Warum nicht den try/catch Block auf die gesamte Lebensdauer der Variable ausweiten?



  • Shade Of Mine schrieb:

    das geht leider nur mit Zeigern:

    Foo* foo;
    try
    {
      foo=new Foo(bar);
    }
    catch(...)
    {}
    
    foo->bla;
    
    delete foo;
    

    Am besten noch in einen smartpointer kapseln. wenn es am stack liegen soll, dann geht das ganze auch noch mit placement new...

    werden objekte nich eh immer über referenzen an den catch block übergeben?



  • otze schrieb:

    werden objekte nich eh immer über referenzen an den catch block übergeben?

    verstehe ich nicht. da wird nirgendwo etwas uebergeben...



  • try{
        int i=5;
        throw(i);
    }
    catch(int& exception){
       //var verändern
    }
    

    bin mir aber jetzt nich so ganz sicher ob throw kopiert oder nicht,aufjedenfall T& muss immer in den catch



  • otze schrieb:

    bin mir aber jetzt nich so ganz sicher ob throw kopiert oder nicht,aufjedenfall T& muss immer in den catch

    klar wird kopiert.
    Es heisst ja
    "throw by value and catch by reference"

    allerdings muss man das nicht 🙂 man kann auch einen Zeiger werfen und einen Hut fangen :p

    hat aber nicht mit dem topic zu tun



  • Danke für die schnelle und gute Hilfe.
    Mit einem Zeiger hat es bestens funktioniert.


Anmelden zum Antworten