tinyXml
-
Hallo ich wollte mal Fragen ob mir von euch jemand etwas erklären kann. Dieses Beispiel hier:
TiXmlDocument doc; TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" ); TiXmlElement * element = new TiXmlElement( "Hello" ); TiXmlText * text = new TiXmlText( "World" ); element->LinkEndChild( text ); doc.LinkEndChild( decl ); doc.LinkEndChild( element ); doc.SaveFile( "madeByHand.xml" );Nutzt ja einmal ein Objekt doc und die ganzen pointer wie decl und element. Warum ist das so? Hat das was mit Dynamischer Speicherverwaltung zu tun oder an was mache ich den Einsatz jeweils fest.
Außerdem würde ich gerne wissen, wie ist das wenn ich den ganzen Code in eine Schleife packe? Ich bekomme ja jedesmal eine neue Datei. Aber wie ist das mit dem Speicher? Wird der für die Pointer jedesmal neu allokiert und ich bekomme irgendwann Probleme? Oder wird der Pointer dann wenn ich ich den Namen nochmal Benutze automatisch gelöscht?mfg, Stefan
-
oNes schrieb:
Nutzt ja einmal ein Objekt doc und die ganzen pointer wie decl und element. Warum ist das so? Hat das was mit Dynamischer Speicherverwaltung zu tun oder an was mache ich den Einsatz jeweils fest.
Dokumentation lesen:
TiXmlNode::LinkEndChildNOTE: the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml. This method is efficient and avoids an extra copy, but should be used with care as it uses a different memory model than the other insert functions.
oNes schrieb:
Außerdem würde ich gerne wissen, wie ist das wenn ich den ganzen Code in eine Schleife packe?
Pack eine Schleife drumherum. Was ist hier genau die Frage? Wie man eine Schleife macht, weisst du ja wohl, oder?
oNes schrieb:
Ich bekomme ja jedesmal eine neue Datei.
Kommt darauf an, wie deine Schleife aussieht. Wenn du einfach dieses Stück Code in eine Schleife packst, dann wird immer das gleiche File überschrieben.
oNes schrieb:
Aber wie ist das mit dem Speicher? Wird der für die Pointer jedesmal neu allokiert und ich bekomme irgendwann Probleme? Oder wird der Pointer dann wenn ich ich den Namen nochmal Benutze automatisch gelöscht?
Die Variablen
doc,decl,elementundtextsind Stackvariablen und werden daher am Ende vom Scope freigegeben. Das woraufdecl,elementundtextzeigen, wird von TinyXML freigegeben, sobalddocfreigegeben wird (siehe oben).Grüssli
-
Ja Schleife ist klar.
Da ich aber noch relativ neu bin in der C++ Programmiererei hab ich mir halt so meine Gedanken gemacht, ob das nicht irgendwie zu nem Speicherüberlauf führt wenn ich in jedem Schleifendurchlauf neuen Speicher anfordere.
Habe ich das dann jetzt richtig verstanden: Die Freigabe von doc erfolgt nach dem doc.savefile()? und danach verlieren auch die anderen Variablen Ihre Gültigkeit?Danke für die Hilfe!