Probleme bei der Speicherfreigabe

  • Hallo!

    Ich habe folgendes Problem:

    Ich habe eine Klasse Angles, die ein doubleArray variabler Größe aufnehmen soll. In dieses Array sollen Winkel gespeichert werden.

    Nun möchte ich Objekte dieser Klasse Angles in einen Vektor speichern bzw. Objekte kopieren usw. Dazu wurde von mir ein Kopierkonstruktor gebaut, der neuen Speicher auf dem Heap reserviert, um dieses Array zu speichern.

    Wenn ich nun Objekte kopiere, funktioniert dies ganz gut. Allerdings werden beim Speichern dieser Objekte in den Vektor anscheinend nur die Referenzen übernommen und kein neuer Speicher auf dem Heap reserviert. Wenn ich nun ein tenporäres Objekt erzeuge und in einen Vektor speichere, dann kracht es am Ende der Funktion, weil der Destruktor der Angleklasse aufgerufen wird und den Speicher wieder freigibt, aber anscheinend das Objekt im Vektor immer noch auf die freigegebene Stelle zeigt.

    Was für eine Lösung würdet ihr mir hierfür vorschlagen? Ich habe mal was von Smartpointern oder Referenzzählern gehört, aber was ist die einfachste (und effizienteste) Lösung? Leider scheint das Problem auch noch an anderen Stellen aufzutreten...

  • Hm,

    hat denn niemand hier eine Idee?

    Wieso kann man kein lokales Objekt in einem Vektor speichern und später darauf zugreifen? Wird es einfach mitgelöscht und der Vektor merkt sich nur die Stelle im Speicher, an der es stehen sollte? Normal ist das nicht...

  • Zitat von fabbishmain

    Wieso kann man kein lokales Objekt in einem Vektor speichern und später darauf zugreifen? Wird es einfach mitgelöscht und der Vektor merkt sich nur die Stelle im Speicher, an der es stehen sollte?


    Falls es hier um C++ geht: Ja, lokale Objekte (die nicht als static deklariert sind) werden am Ende des Blocks, in dem sie deklariert sind, zerstört. Das läßt sich nicht verhindern, Punkt.
    Wenn du im Vector Referenzen bzw. Pointer speichern willst, mußt du die Objekte dafür dynamisch anlegen.

    *plantsch*

  • Ja, es handelt sich um C++. Der letzte Beitrag scheint es ziemlich genau zu treffen, zu der Schlussfolgerung bin ich inzwischen auch gelangt.

    Vielen Dank schonemal

  • Mein Gedankengang:Eigentlich müsste es doch möglich sein die Objekte im Vector zu makieren und mit dem OLE Beabeitungs Tool einzeln zu bearbeiten, also wenn das dein Problem ist das du nicht mehr in die Bearbeitung reinkommst solltest dir sowas zulegen sonst.....weiter überlegen.....Sorry

  • Was ich eigentlich sagen will ist das es mit dem Allokator zusammen hängt, der für die Reservierung und Freigabe von Speicher verantwortlich ist.Jedenfalls probier es mit pointer allocate (size_type,allocator ::const_pointer hint = 0);theoretisch sollte das die Speicherreservierung ermöglichen....weiter überleg....Sorry

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!