Objekt innerhalb Try/catch initalisieren



  • Ich will in Klasse A ein Objekt von Klasse B als Klassenvariable besitzten.
    B soll erst in der Methode "methode()" innerhalb eines try-catch-Blockes initialisiert werden. Wie macht man das am elegantesten ohne "new()"?
    Ich hab das jetzt mit einer temporären Variable gemacht.. aber geht das irgendwie auch anders/einfacher?

    class A{
    private:
    B *objekt
    public:
    void methode();
    }
    
    void A::methode(){
    
    try{
    tmpObjekt =  B("irgendwas");
    this->objekt = &tmpObjekt
    }
    catch (){]
    
    objekt->irgendwas();
    }
    


  • edit: Man verzeihe mir die Syntax-Fehler. Hab das schnell aus dem Kopf aufgeschrieben. tmpObjekt ist natürlich vom Typen "B"



  • Da die lokale variable außerhalb des Blocks nicht mehr da ist, ist das dereferenzieren des Zeigers später undefiniertes Verhalten. Ohne dynamische Allokation geht das nicht, nimm am besten einen unique_ptr.



  • Was genau hast du denn eigentlich damit vor? Was spricht dagegen B im Konstruktor von A zu initialisieren?

    Das Problem das dein Design im allgemeinen mit sich bringt ist das du überall sichergehen musst das auf B nicht zugegriffen wird bis deine methode auch tatsächlich aufgerufen wird, da du sonst in einen nullptr oder noch schlimmer irgendwohin greifst.

    Für das arbeiten mit Zeigern innerhalb der Klassen lohnt es sich immer auf die SmartPointer zu schaun, da sich deren Einsatz oft lohnen kann.



  • Falsches Unterforum - hier ist C++/CLI, nicht ISO C++.


Anmelden zum Antworten