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>&