ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Suche | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
|
||||||
Reth
Nutzer
29.10.2004, 01:13 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung @Holger Nein das war mir so noch nicht klar! Vielen Dank. Muss meinen Code daraufhin noch untersuchen. Momentan bin ich in der Freigabeproblematik schon ein ganzes Stück weiter aber auch an ner Privilege Violation angelangt, die ich erstmal finden muss! Ich hätte übrigens als Vorschlag zur automatischen Freigabe von mit new angelegten Objekten das Programmende als Ende des Gültigkeitsbereiches gehabt. |
|||||
Reth
Nutzer
29.10.2004, 00:33 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Hallo Holger, an den Grundlagen hakt es eigentlich nicht.Ich weiss (von Javaseite her) welche Variablen in welchem Scope Gültigkeit besitzen. Nach alldem was ich über C++ erfahren habe, wusste ich auch, was Du mir nochmals gesagt hast: Wenn ein Gültigkeitsbereich eines Objektes verlassen wird, wird dessen Destruktor automatisch gerufen. Naachdem das aber bei meinen Objekten nicht geschah, dachte ich dass ich evtl. in einigen Fällen Destruktoren manuell rufen muss!? Darum dieses seltsame Konstrukt was einem auch nur die Haare zu Berge stehen lassen kann. Aber dann muss ich weiter Debuggen, dann liegt bei mir das Problem noch an anderer Stelle, so dass deswegen die Destruktoren nicht gerufen werden. Die Objekte selbst sind mit new angelegt und liegen in ebenfalls mit new angelegten Wrappern. Ein new verlangt doch aber immer nach einem delete, oder werden mit new angelegte Objekte auch beim Verlassen des Gültigkeitsbereiches automatisch gelöscht? |
|||||
Reth
Nutzer
28.10.2004, 22:45 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Zitat: Aber wie sieht dann die richtige Freigabe syntaktisch aus? ich habs mit liste.~LinkedListC<Typ>(); probiert (und Varianten). Immer erfolglos. Was wäre denn die Alternative zu globalen Variablen innerhalb einer Klasse? Schien mir der beste Weg und mache ich auch immer, wenn ich ne Variable innerhalb mehrerer Methoden einer Klasse brauche, sonst müsste ich sie ja jedesmal bei jedem Methodenaufruf übergeben?! |
|||||
Reth
Nutzer
28.10.2004, 12:05 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung @Solar Danke für die Antwort. So nen ähnlichen Ansatz hab ich schon begonnen. Mein momentanes Problem ist aber das zweite in meinem letzten Post beschriebene. Ich hab Objektvariablen LinkedListC<Typ> liste; im HeaderFile bei der Objektdefinition angelegt und deren Destruktoren werden beim Beenden des Programmes anscheinend nicht gerufen. Alle Versuche diese Destruktoren manuell im Code zu rufen, schlugen bisher mit nem Compilerfehler fehl. Kann (sollte) man in C++ solche Membervariablen dann gar nicht definieren, da man sie nicht freigeben kann? |
|||||
Reth
Nutzer
27.10.2004, 19:34 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung So hier nun mal der Klartext! Meine Elementklasse: template <class T> class ElementC { public: ElementC(T *content) { this->content = content; this->next = NULL; }; ~ElementC() { if (content != NULL) { delete content; content = NULL; } if (next != NULL) { delete next; next = NULL; } }; ElementC *getNext() { return next; }; void setNext(ElementC *next) { this->next = next; }; T *getContent() { return content; }; private: ElementC *next; T *content; }; Diese wird nun über folgende Methode der Liste hinzugefügt: template <class T> void LinkedListC<T>::addElement(T *elem) ... ElementC *root = new ElementC(elem); Wie mach ich das nun am geschicktesten, dass meine Objekte in den Listen verweilen ihre Destruktoren erst beim Auflösen der jew. Liste gerufen werden (am besten automatisch) und keine Kopien angelegt werden, denn wenn ein Objekt in mehreren Listen ist, dann muss es immer das gleiche sein? Oder ist das jetzt zuviel gefragt, weil ich eigentlich selbst drauf kommen müsste? Ach ja und wie ruf ich denn einen Destruktor auf ne Variable einer Templateklasse auf? Also ich hab in der Definition meiner Klasse im Headerfile folgende stehen: LinkedListC<FramesC> allFrames; Wie ruf ich denn nun den Destruktor von allFrames syntaktisch korrekt auf? Dieser wird beim Beenden und verlassen der Klasse momentan noch nicht gerufen! [ Dieser Beitrag wurde von Reth am 27.10.2004 editiert. ] |
|||||
Reth
Nutzer
27.10.2004, 12:27 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung @Solar Jetzt bin ich etwas durcheinander. In einem früheren Post hast Du doch gesagt: Zitat:Zitat: Und nun: Zitat:Zitat: Also das blick ich nicht so ganz. Widerspricht sich in meinen Augen etwas (liegt evtl. daran, dass ich mich mit diesen ganzen Konzepten noch nicht so gut auskenne)? Meine Listen enthalten als Elemente immer nur Wrapperklassen, die den eigentlichen Inhalt speichern. Das Ganze funktioniert mit nem Template, damit ich alle Arten von Objekten mit einem Listentyp bearbeiten kann (wobei pro Listeninstanz nur jeweils eine Art von Objekten gespeichert wird). Kann den dazugehörigen Source später mal posten! |
|||||
Reth
Nutzer
27.10.2004, 10:21 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Hi nochmal, [quote] Original von Solar: Zitat: Danke. Hab ich verstanden. Sehr gut! Zitat: Richtig, hab mich da falsch ausgerückt. Zitat:Zitat: Leider nein! Aber wieso jetzt eine Kopie? Ich hab Referenz so verstanden, dass keine Kopie des Objektes angelegt wird? Jetzt bin ich verwirrt. Würde nämlich genau letzteres benötigen: Die Referenz auf ein Objekt in der Liste - aber keine Kopie des Objektes in der Liste. Denn wenn in einer weiteren Liste ebenfalls eine Referenz auf das gleiche Objekt gespeichert ist und sich das Objekt ändert, sollen beide Referenzen auf das geänderte Objekt verweisen. Wenn jedoch nun bei Übergabe der Referenz an die Liste eine Kopie des Objektes angelegt wird ist das natürlich denkbar schlecht! Was tut man in so einem Fall? Doch wieder auf Zeiger zurückfallen? |
|||||
Reth
Nutzer
27.10.2004, 08:14 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Nochmal vielen Dank, sehe nun schon etwas klarer. Aber worin genau besteht in C++ der Unterschied zwischen einer Referenz und einem Pointer auf ein Objekt? Habe bei mir gestern folgendes Problem festgestellt, dass genau damit zusammenhängt: Meine Liste arbeitet noch mit Zeigern auf Objekte. Wenn ich nun dem Objekt, welches die Liste enthält ein Inhaltsobjekt für diese Liste gebe, gebe ich dieses nun wie Solar vorgeschlagen hat: a.addElement(B("CD", 12, TRUE)); // nur als Syntaxbeispiel Im Objekt a in der Methode addElement mache ich nun folgendes, da meine Liste noch nicht auf Referenzen umgestellt ist (was ich aber als nächstes tun werde!): addElement(B &b) { list.addElement(&b); } Damit habe ich einen Zeiger auf die Referenz von b. Kann es nun sein, dass nach Verlassen der addElement-Methode der Zeiger auf die Referenz nichts zählt und deswegen der Destruktor von B gerufen wird (so gestern bei mir geschehen)? Ich hoffe, dass dies nicht mehr der Fall ist, wenn meine Liste auf Referenzen umgestellt ist und ich in a folgendes schreiben kann: addElement(B &b) { list.addElement(b); } Oder ist dort nach dem Verlassen dieser Methode wieder damit zu rechnen, dass direkt im Anschluss der Destruktor von B gerufen wird? Das stünde dann im Widerspruch zu dem was Solar bzgl. Liste und Referenz darin schon sagte und würde dann wohl am Alter meines Compilers liegen. Ciao |
|||||
Reth
Nutzer
25.10.2004, 19:47 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Zitat: Ja das tun sie. Aber ich meinte ja, dass Zeiger auf Objekte weniger Speicherplatz verbrauchen, als komplette Objekte, die immer wieder kopiert/geklont werden. Daher meine Frage. |
|||||
Reth
Nutzer
25.10.2004, 19:45 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Hi Solar, Zitat: Ok I see. Zitat:Zitat: Ich meinte ja auch, wenn man immer Objektkopien anlegt anstelle Zeiger auf die Objekte. Zitat: An dem Design kann und muss ich wohl was ändern. Sehe ein, dass es gar nicht nett von mir ist, der armen Liste das Löschen (Destruktoraufruf) ihrer Elemente zu überlassen, die ich anlege und zuweise. Die Liste kann ja gar nicht wissen, ob sie die Einzige ist, die ne Referenz auf das jeweilige Objekt hat! Es geht hier eigentlich schon ums Prinzip. Habe auch auf Arbeit öfters mal den Fall, dass eine Objekt an mehreren Stellen auftaucht und auch in verschiedenen Behältern wie Listen. Das ist nicht immer ganz unproblematisch aber in dem genannten Fall hier mit meiner Freigabe im Listendestruktor ist es ein Designfehler. Ciao |
|||||
Reth
Nutzer
25.10.2004, 16:17 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung @Holger Auch Dank für die Antworten! Zitat: Also ist der C++ Programmierer gar kein so Pointer-Jongleur wie der C-Programmierer? Benutzt der C++ Programmierer fast nur Objekte und deren Kopien als viel mehr Referenzen auf Objekte (in Java hat man nur Referenzen)? Verbrät das nicht viel mehr Speicher als nötig wäre? Zitat: Eigentlich unabhängig von der Objektstruktur wenn ich mehr als eine Referenz auf das Objekt habe, dann muss ich in dem Fall selber zusehen, wie ich das sauber freigebe, so dass keine unzulässigen Aufrufe entstehen. In meinem Fall hab ich mir halt selbst ein Bein gestellt, weil ich clever sein wollte und meine Listen bei ihrer Zerstörung alle Elemente versuchen freizugeben. Das geht natürlich nicht, wenn ein Element in mehr als einer Liste vorkommt. Entweder ich ändere das ganze Konzept der Liste, oder ich verwende den Vorschlag von whooha und implementiere einen Counter, der beim Einfügen in die Liste erhöht und beim löschen, rausnehmen etc. erniedrigt wird. Auf den wird dann beim Zerstören der Liste geprüft, wenn er 0 ist, kann das Element ebenfalls zerstört werden. |
|||||
Reth
Nutzer
25.10.2004, 13:19 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung @Solar Danke nochmals für die neuen Infos! [quote] Original von Solar: Zitat:Zitat: Gibts dafür ne standardisierte oder zumindest übliche Vorgehensweise in C++? |
|||||
Reth
Nutzer
25.10.2004, 12:47 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Zitat: Verstanden. Zitat: Wie sieht das dann konkret aus? Zitat: Und was passiert, wenn ein und dasselbe Objekt in 2 versch. Listen stehen soll? Dann zeigen doch die jeweiligen anonymen Autopointer auf das gleiche Objekt, es kann aber nur einmal freigegeben werden!? Sorgt Autopointer (bzw. dessen Implementierung) dann automatisch dafür? Wenn eine Liste zerstört wird, die andere aber nicht (in beiden ist das gleiche Objekt eingetragen mittels aptr, wie auch immer das auszusehen hat), enthält die nicht-zerstörte Liste dann noch einen gültigen Zeiger auf das Objekt? Oh weh, mit jeder Antowrt tun sich mehr fragen auf! |
|||||
Reth
Nutzer
25.10.2004, 12:37 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung @Solar Danke für die Antworten erstmal! Zitat: Heisst das in meinem Fall, wenn ich eine Klasse A habe und ich diese mit list.addElement(A("Param1", 2, 'C', TRUE)); in die Liste lege sie dort solange bleibt, bis die Liste zerstört wird, auch wenn die Methode und die Klasse, in der dieser Aufruf steht zwischenzeitlich verlassen wird? Zitat: Kann ich gern tun, irgendwelche Tips, jetzt wo Du den direkten Vergleich hast? Ich kenne zwar noch keinen umfangreicheren C++ Code, aber Java-Code ist im allgemeinen sehr gut lesbar, v.a. wegen der sprechenden Methodennamen etc. Zitat: Ich hoffe doch nur, weil ich sie nicht habe - oder siehtst Du bei mir noch sonstige Probleme? Zitat: Doch, in der Tat! Zitat: Ist in der Planung! Ciao |
|||||
Reth
Nutzer
25.10.2004, 11:49 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Hi auch, Zitat: Nun das erscheint mir als die sinnvollste Möglichkeit zur Laufzeit Objekte von Dingen anzulegen, die vor dem Programmstart noch nicht bekannt sind. Wenn während des Programms neue Objekte notwendig sind, die vorher noch nicht absehbar waren, wie soll man das denn realisieren? Zitat: Das wird schwierig genug Zitat: Hab ich auch nicht. Zitat: Wie erstellt man dann die Objekte in diesem Falle? Zitat: Mein momentan verwendetes Entwicklungssystem hat die SDL leider nicht! Ciao [ Dieser Beitrag wurde von Reth am 25.10.2004 editiert. ] |
|||||
Reth
Nutzer
25.10.2004, 07:40 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Danke, gute Idee. Denke auch, dass dies die einfachste Umsetzung ist, ohne alles neu konzeptionieren zu müssen. Mich würde mal der generelle Ansatz in C++ für anonyme dynamische Objekete interessieren (falls es sowas gibt). |
|||||
Reth
Nutzer
24.10.2004, 19:02 Uhr [ - Direktlink - ] |
Thema: C++ Problem: Objektfreigabe
Brett: Programmierung Hallo allerseits, habe als verwöhnter Javaprogrammierer ein C++ Problem. Ich habe aus Javagewohnheit in meinem Programm viele dynamische und z.T. anonyme Objekte erstellt. Für deren Verwaltung habe ich eine Listenklasse die mit einem Template arbeitet und deshalb Objekte jeglichen Typs verwalten kann. Das Ganze sieht ungefähr so aus: Object a = new A(new B()); list->addElement(a); Damit ich mit dynamischen anonymen Objekten umgehen kann, gibt die Liste in ihrem Destruktor sämtliche Elemente frei. Dadurch bekomme ich keine Probleme mit den anonymen Objekten. Nun benötige ich aber manche Objekte in unterschiedlichen Listen also in der Art: list1->addElement(a); // um bei obigen Beispiel zu bleiben Das führt natürlich zu dem Problem der doppelten Freigabe was verheerende Auswirkungen hat. Ich vermute mal, dass mein Ansatz für C++ komplett falsch ist?! Aber was ist der Richtige? Wie gehe ich in C++ mit dynamisch erzeugten anonymen Objekten um? Bin für nen guten Tip sehr dankbar! Ciao |
|||||
Reth
Nutzer
23.10.2004, 19:07 Uhr [ - Direktlink - ] |
Thema: Timeserver tut nicht mehr!
Brett: Amiga, AmigaOS 4 Keiner ne Idee? |
|||||
Reth
Nutzer
22.10.2004, 23:52 Uhr [ - Direktlink - ] |
Thema: Timeserver tut nicht mehr!
Brett: Amiga, AmigaOS 4 Zitat: |
|||||
Reth
Nutzer
22.10.2004, 23:45 Uhr [ - Direktlink - ] |
Thema: Timeserver tut nicht mehr!
Brett: Amiga, AmigaOS 4 Danke für den Tip aber Atomic will bei mir auch nicht: Connecting to Atomic Clock server ptbtime2.ptb.de Server connection time: 45.88 Server Health: insufficient...trying next server. Connecting to Atomic Clock server de.pool.ntp.org Connection error with de.pool.ntp.org Connecting to Atomic Clock server ntp0.fau.de Connection error with ntp0.fau.de Connecting to Atomic Clock server ntp3.fau.de Connection error with ntp3.fau.de Connecting to Atomic Clock server ptbtime1.ptb.de Connection error with ptbtime1.ptb.de Connecting to Atomic Clock server ntps1-0.cs.tu-berlin.de Connection error with ntps1-0.cs.tu-berlin.de Connecting to Atomic Clock server ntps1-1.cs.tu-berlin.de Connection error with ntps1-1.cs.tu-berlin.de Connecting to Atomic Clock server ntp1.t-online.de Connection error with ntp1.t-online.de Connecting to Atomic Clock server ntp1.fau.de Connection error with ntp1.fau.de Connecting to Atomic Clock server ntp2.fau.de Connection error with ntp2.fau.de Connecting to Atomic Clock server Connection error with *** NIST Time Services are not present...exiting Solche Meldungen gabs auch mit den voreingestellten Servern! Liegts evtl. daran, dass ich beim meinem DSL-Router nen neuen Provider eingetragen hab? An der Firewallkonfig. des Routers hab ich aber nix geändert! |
|||||
Reth
Nutzer
22.10.2004, 22:08 Uhr [ - Direktlink - ] |
Thema: Timeserver tut nicht mehr!
Brett: Amiga, AmigaOS 4 Wer ist Atomic? Hab wie bereits erwähnt schon diverse Timeserver durchprobiert bei allen dasselbe Problem drum dachte ich der Grund liegt auf meiner Seite der Leitung!? |
|||||
Reth
Nutzer
22.10.2004, 20:23 Uhr [ - Direktlink - ] |
Thema: Timeserver tut nicht mehr!
Brett: Amiga, AmigaOS 4 Hallo allerseits, hatte bei mir im Genesis immer den Timeserver der TU-Berlin drin und keine Probleme. Neuerdings bekomme ich allerdings immer die Meldung: get_daytime: could not open ntp1.t-online.de/daytime Habe an den Einstellungen eigentlich nichts geändert. Auch bei anderen Timeservern kommt diese Meldung, kann sie aber alle anpingen! Da meine Akku-Uhr auf dem A4000 nicht mehr tut bin ich leider darauf angewiesen, wenn ich keine Mails von anno dazumal versenden will falls ich nach nem Reboot mal wieder vergessen habe die Zeit einzustellen! Weiss da jemand Rat? Danke schon mal Ciao |
|||||
Reth
Nutzer
19.10.2004, 19:26 Uhr [ - Direktlink - ] |
Thema: Mega Lo mania auf dem A1200 ???
Brett: Amiga, AmigaOS 4 @R-TEAM Also bei mir liest WHDLoad die Daten nicht von der Diskette. Schade, dass man keine virtuellen Laufwerke angeben kann, sonst könnt ich probieren ADF Files zu machen und die von emulierten Disketten zu lesen. |
|||||
Reth
Nutzer
17.10.2004, 00:45 Uhr [ - Direktlink - ] |
Thema: IBrowse2.3 Spoofing
Brett: Amiga, AmigaOS 4 Also JAVA isses definitiv nicht. JavaSCript kann ich nicht sagen, da ich mir den Seitensource und die darin enthaltenenen bzw. referenzierten Scripte nicht angeschaut habe. Ich komme bis auf die Anmeldeseite, wenn ich mich dann aber angemeldet habe, sagt mir der Bankserver, dass ich eine nicht unterstützte Browserversion verwende. Kann ich das irgendwie umgehen (wohl ne schwierige Frage, wenn man nicht weiss, was die Bankseiten so machen)? |
|||||
Reth
Nutzer
17.10.2004, 00:11 Uhr [ - Direktlink - ] |
Thema: IBrowse2.3 Spoofing
Brett: Amiga, AmigaOS 4 Hallo allerseits, würde von meinem Amiga aus auch gern Online-Banking machen, leider geht das mit IBrowse nicht, da mir immer gesagt wird, dass meine Browserversion nicht unterstützt wird. Habe allerdings Mozilla-Spoofing eingeschaltet! Weiss jmd. wie man das hinbekommen kann? Evtl. nen anderen Browser versuchen? Danke schon mal Ciao |
|||||
Reth
Nutzer
15.10.2004, 08:35 Uhr [ - Direktlink - ] |
Thema: Geht Genesi den besseren Weg als AInc?
Brett: Amiga, AmigaOS 4 @eliotmc Das finde ich auch. Wenn es das AOs4 für den PegII gäbe, stünde der im Handumdrehen (bzw. so schnell als möglich) bei mir daheim! MOS würde ich mir dann genauso anschauen, im direkten Vergleich! Aber die veralteten und überteuerten AOnes mit den bekannten und neuen Problemen tu ich mir nicht an. Da hoffe ich, dass mein A4000 noch lang genug hält! Oder aber die AOnes besser und günstiger werden! |
|||||
Reth
Nutzer
15.10.2004, 08:27 Uhr [ - Direktlink - ] |
Thema: Mega Lo mania auf dem A1200 ???
Brett: Amiga, AmigaOS 4 @R-Team Vielen Dank für Deine beiden Anleitungen! Hab mit UnitControl schon ewig nicht mehr rumgespielt, da ich froh war als meine UW-SCSI/SCSI-II Verkabelung am cybppc.device endlich fehlerfrei lief! Was hast Du denn so für Datenraten mit scsispeed? Dann kann ich ja mal vergleichen. Habe als UW-Platten bei mir ne Fujitsu 18,x GB und ne IBM 2,x GB (eine davon ist glaub ne SCA-Platte). Das mit der Diskette und MegaloMania werd ich auch mal ausprobieren! Würde das Game so gern mal wieder zocken! Hat riesig Spass gemacht, damals vor ??? Jahren auf meinem A500. Nur unter A4000 war es bisher nicht zum Laufen zu bewegen! Danke nochmals! Ciao |
|||||
Reth
Nutzer
14.10.2004, 10:10 Uhr [ - Direktlink - ] |
Thema: Mega Lo mania auf dem A1200 ???
Brett: Amiga, AmigaOS 4 @R-TEAM Hi, kurze Frage: Wie kommt man denn am besten an die Parameter zum Plattentuning. Meine 2 könnten auch noch etwas Speed vertragen! |
|||||
Reth
Nutzer
12.10.2004, 22:52 Uhr [ - Direktlink - ] |
Thema: Mega Lo mania auf dem A1200 ???
Brett: Amiga, AmigaOS 4 Ja ich find auch, dass man das irgendwie zum Laufen bekommen muss! Auf meinem A4000 bin ich zwar schon bis zum ersten Level gekommen, aber immer dann wenn die 1. Entwicklung fertiggestellt war, ging nix mehr! Gibts da schon was Neues? |
|||||
Reth
Nutzer
12.10.2004, 11:43 Uhr [ - Direktlink - ] |
Thema: Probleme mit neuer Amigift-Version
Brett: Amiga, AmigaOS 4 @Der_Untote Hab ich auch schon bemerkt, dachte aber immer, dass die Suche in der neuen Liste nur noch keine Ergebnisse lieferte. Aber nun weiss ich ja, dass dem doch nicht so war! |
|||||
|
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |