Rekursion per throw verlassen !



  • Hallo,

    hab vor en paar Wochen mal ne Frage zu dem verlassen einer Rekusrsionsfkt gestellt. Hab es dann mit der try, throw, catch methode gemacht. Jetzt mal ne Speicherfrage ! Wenn ich ne Rekursionsfkt nach n durchläufen mittels throw verlasse, wird dann der speicher der ganzen funktionen, variablen was weis ich automatisch freigegeben ? wenn nein, wie mach ich das in der catch anweisung dann ? mit delete [] balbalbla, könnte schwierig werden, weil ich ja nicht weis wie oft welches element etc aufgerufen wurde !

    ODER DENK ICH MAL WIEDER VERKEHRT ?!

    Danke

    Gruß Euro.



  • Grundregel: wenn delete einfach so im Code aufgerufen wird, ist es fast immer falsch (im Fall von Exceptions). Wenn du hingegen smart pointer verwendest, passt es.



  • eurofreddy79 schrieb:

    ODER DENK ICH MAL WIEDER VERKEHRT ?!

    Nach meinem Geschmack schon. Exceptions sind für Ausnahmen gedacht und nicht, um rekursive Algorithmen zu beenden.



  • Benutz doch gleich goto 🙄



  • Na danke phlox81 ..... GOTO ist ne super Idee 🙂

    hab mir die Smart Pointer mal angeschaut und das sieht für meine Zwecke recht viel versprechend aus, allerdings hab ich bei der Implementierung ein Problem.

    void rekupara(CXmlDocument *tz)
    {
    ...
    ..
    rekupara(tz);
    }

    void main {
    auto_ptr<CXmlDocument> tz(new CXmlDocument);
    ....
    ....
    ...
    tz->blabla;
    rekupara(tz);
    }

    So jetzt bekomme ich beim compilieren einen Fehler der da heist:

    error C2664: 'rekupara' : cannot convert parameter 1 from 'std::auto_ptr<_Ty>' to 'CXmlDocument *'
    with
    [
    _Ty=CXmlDocument
    ]

    hab jetzt schon einige Variationen versucht, aber nix funktioniert.
    Wie muss ich diese Zeiger den übergeben ?

    Danke

    Gruß Euro.



  • .get()



  • eurofreddy79 schrieb:

    Wie muss ich diese Zeiger den übergeben ?

    auto_ptr<CXmlDocument>&
    

Anmelden zum Antworten