amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Suche [ - Suche - Neue Beiträge - Registrieren - Login - ]

Erste << 52 53 54 55 56 -57- 58 59 60 61 62 Ergebnisse der Suche: 1858 Treffer (30 pro Seite)
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:
Original von Holger:

Abgesehen davon, dass globale Variablen keine gute Idee sind, sollte trotzdem der Destruktor korrekt aufgerufen werden. Wenn das nicht passiert, fallen mir zwei Möglichkeiten ein:
  • Du beendest das Programm nicht korrekt (hinter dem Rücken des Compilers
  • Der Compiler ist fehlerhaft

  • 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? :dance3:

    Oder ist das jetzt zuviel gefragt, weil ich eigentlich selbst drauf kommen müsste? :glow:


    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:
    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?


    Solange die Variable list besteht, ja.


    Und nun:

    Zitat:
    Zitat:
    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?


    Wenn sich im Aufrufer nichts ändert, ja. Aber in list liegt ja dann eine Kopie von b, auch wenn das wahrscheinlich nicht das ist, was Du vorhattest.


    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:
    Ein Pointer kann auf ein beliebiges Objekt zeigen, und von einem auf ein anderes Objekt "umgebogen" werden. Die Syntax unterscheidet sich von einem "echten" Objekt dadurch, daß ein Pointer dereferenziert werden muß. Ein Pointer ist eine eigenständige Datenstruktur.

    Eine Referenz zeigt auf ein ganz spezielles Objekt, kann nicht umgebogen werden, und unterscheidet sich syntaktisch nicht von einem "echten" Objekt. Eine Referenz ist nur ein anderer Variablenname für dieselbe Datenstruktur (das Objekt) - also ein Alias.


    Danke. Hab ich verstanden. Sehr gut!

    Zitat:
    C++ macht kein Reference Counting; der Pointer auf b hält b nicht am Leben, wenn b selbst out-of-scope geht.

    Der Destruktor wird wahrscheinlich nicht beim Verlassen von addElement() aufgerufen, sondern beim Verlassen der aufrufenden Funktion, in der b als lokale Variable deklariert wurde. ;)


    Richtig, hab mich da falsch ausgerückt.

    Zitat:
    Zitat:
    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?


    Wenn sich im Aufrufer nichts ändert, ja. Aber in list liegt ja dann eine Kopie von b, auch wenn das wahrscheinlich nicht das ist, was Du vorhattest. ;)


    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:
    Original von gni:
    Zitat:
    Reth:
    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)?

    Pauschal läßt sich das nicht beantworten. new() braucht (fast ;-) immer ein delete() und wie Du gesehen hast, gibt es starke Aversionen gegen new().
    Zitat:
    Verbrät das nicht viel mehr Speicher als nötig wäre?
    Wieso? Auch statische Objekte belegen Platz.

    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:
    Original von Solar:

    Korrekt. Zumal mit dem syntaktischen Element der Referenz ein guter Weg dazugekommen ist, Funktionen by reference aufzurufen (also ohne ein Objekt zu kopieren), ohne mit (fehleranfälligen) Pointern hantieren zu müssen.

    Wie gesagt, in C++ benutzt man viel und gerne die Referenz:

    void foo( Object const & paramter )
    { ... }

    In der Funktion ist "parameter" somit keine Kopie des Arguments, sondern das Argument selbst. Und wenn man das 'const' wegläßt, kann man "parameter" in der Funktion sogar verändern.


    Ok I see.

    Zitat:
    Zitat:
    Verbrät das nicht viel mehr Speicher als nötig wäre?

    Das Speicherprofil der durchschnittlichen C++-Anwendung liegt eher unter dem einer Java-Anwendung vergleichbarer Güte, weil Garbage Collection und der dazugehörige Aufwand wegfällt. (Von der Virtual Machine und dem JIT mal ganz zu schweigen.)


    Ich meinte ja auch, wenn man immer Objektkopien anlegt anstelle Zeiger auf die Objekte.

    Zitat:
    Ich kann mir immer noch nicht vorstellen, warum Du zwei Listen mit Referenzen auf dieselben Objekte haben willst, und Du hast mit keinem Wort etwas über die Natur dieser Listen erwähnt. Geht's hier nur um's Prinzip? Oder kann man evtl. an Deinem Design etwas ändern?

    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:
    Original von Solar:

    Für den ambitionierten Pointer-Jongleur bleibt nur noch der shared_ptr - nur ist der leider (noch) nicht in der Standardbibliothek, sondern (noch) nur in der Boost-Bibliothek.


    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:
    Also "Standard" ist leider nicht, und "üblich"... hängt halt zu sehr von Deiner Datenstruktur ab, und was Du eigentlich vorhast...

    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:
    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!?

    Nein. auto_ptr und refernziertes Objekt stehen in einer 1:1-Beziehung. Auf ein Objekt kann immer nur ein auto_ptr zeigen. In diesem Fall ist auto_ptr die falsche Lösung.

    Wenn Du tatsächlich ein- und dasselbe Objekt in zwei Listen brauchst, brauchst Du tatsächlich einen Reference Counter in irgendeiner Form.


    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:
    Original von Solar:
    Oh, zur Syntax:

    new Object() gibt Dir einen Pointer auf ein Object, Object() gibt Dir ein Object.


    Verstanden.

    Zitat:
    STL-Container speichern Kopien der Objekte. Das ist OK, wenn Deine Objekte "billig" zu kopieren sind (d.h., nicht übermäßig groß / komplex).

    Wenn sie "teuer" sind, oder Du unbedingt "new" verwenden möchtest, gibt es (ebenfalls in der STL) das Wrapper-Template auto_ptr<>. Das wird benutzt wie folgt:

    auto_ptr<Object> aptr( new Object() );

    Du kannst aptr wie einen Pointer auf Object verwenden. Der Pointer auf Object ist eine Membervariable von aptr, der syntaktisch transparent behandelt wird - *aptr ist vom Typ Object.


    Wie sieht das dann konkret aus?

    Zitat:
    Der "Trick" bei auto_ptr<> besteht darin, daß bei einer Kopie (auto_ptr<Object> bptr = aptr) keine echte Kopie angelegt, sondern der Pointer auf Object "weitergereicht" wird - aptr ist nach der Zuweisung nicht mehr gültig. Und wenn bptr "out-of-scope" geht, wird (durch den Destruktor von auto_ptr<>) automatisch "delete" auf den enthaltenen Pointer aufgerufen.

    Auf den ersten Blick nur verwirrend; aber extrem praktisch, wenn Du Pointer in einem Container speichern willst (wie oben beschrieben):

    list.push_back( aptr );

    In der Liste wird ein (anonymer) auto_ptr<Object> als Kopie von aptr angelegt. aptr ist ab sofort ungültig. Geht jetzt list out-of-scope, ruft es den Destruktor für alle enthaltenen Objekte auf - und das Objekt, auf das aptr ursprünglich gezeigt hat, wird "delete"'d.


    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:
    Original von Solar:
    Zitat:
    Original von Reth:

    Wenn während des Programms neue Objekte notwendig sind, die vorher noch nicht absehbar waren, wie soll man das denn realisieren?


    Als lokale Variable?

    Class var; // Standardkonstruktor
    Class var("Hallo!"); // Class( char * ) oder Class( string& )
    Class var = "Hallo!"; // Erzeugen eines anonymen Objekts und Zuweisung über operator=()

    "new" legt ein Objekt auf dem Heap an, das solange existiert, bis es mit "delete" zerstört wird. Das "var" aus den obigen Beispielen wird automatisch zerstört, wenn es "out of scope" geht.

    Oder anonym:

    #include <vector>

    using std::vector;

    vector<Object> list;

    list.push_back( Object("Hallo") );
    list.push_back( Object("Welt") );


    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:
    Bitte, bitte gib Dir Mühe. Ich habe mir ein Projekt an's Bein gebunden, bei dem ein Java-Progger genau das gemacht hat: In C++ Java zu programmieren. Grau-en-haft. Ich krieg' jedesmal Migräne, wenn ich versuche, den Code wieder ein Stück lesbarer zu machen. 8)

    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:
    Du meinst STL, und Du hast ein Problem. :P

    Ich hoffe doch nur, weil ich sie nicht habe - oder siehtst Du bei mir noch sonstige Probleme? :shock2:

    Zitat:
    Du machst nicht zufällig mit MaxonC++ herum, oder StormC 3? ;)

    Doch, in der Tat!

    Zitat:
    Nein, ehrlich. C++ ohne STL ist ungefähr wie Java ohne 'import'. Dringend GCC 3.x besorgen! ;)

    Ist in der Planung!

    Ciao
     
    Reth   Nutzer

    25.10.2004, 11:49 Uhr

    [ - Direktlink - ]
    Thema: C++ Problem: Objektfreigabe
    Brett: Programmierung

    Hi auch,

    Zitat:
    Original von Solar:

    Wieso willst Du sie überhaupt dynamisch erzeugen?


    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:
    Zunächst einmal, ganz wichtig, begreife C++ als eigene Sprache, nicht als eine andere Möglichkeit Java zu programmieren.

    Das wird schwierig genug :glow:

    Zitat:
    Nicht jede Klasse muß von einem allgegenwärtigen "class Object" abgeleitet sein. Wenn zwei Klassen nicht miteinander verwandt sind, modelliere sie auch nicht als verwandt.

    Hab ich auch nicht.

    Zitat:
    Nicht jedes Objekt muß mit "new" erstellt werden. (Im Gegenteil, oft wirst Du in einem gut entworfenen Programm kein einziges "new" brauchen.)

    Wie erstellt man dann die Objekte in diesem Falle?

    Zitat:
    Mache Dich mit der Standardbibliothek vertraut. Dort wirst Du Dinge finden wie Container (vor allem <vector>), oder den auto_ptr (in <memory>).

    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:
    Original von Reth:
    Danke für den Tip aber Atomic will bei mir auch nicht:

    Connecting to Atomic Clock server ptbtime2.ptb.de
    Server connection time: 0.04
    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 ntps1-1.cs.tu-berlin.de
    Connection error with ntps1-1.cs.tu-berlin.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 ptbtime1.ptb.de
    Connection error with ptbtime1.ptb.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, 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!
     
     
    Erste << 52 53 54 55 56 -57- 58 59 60 61 62 Ergebnisse der Suche: 1858 Treffer (30 pro Seite)

    Suchbegriffe
    Schlüsselwörter      Benutzername
    Suchoptionen
    Nur in diesen Foren suchen
       nur ganze Wörter
    Nur Titel anzeigen
    alle Treffer anzeigen

    .
    Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
    Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
    .