vector :: Mit Zeigermitglied löschen

Ich manipuliere Vektoren von Objekten, die wie folgt definiert sind:

class Hyp{
public:
int x;
int y;
double wFactor;
double hFactor;
char shapeNum;
double* visibleShape; 
int xmin, xmax, ymin, ymax; 

Hyp(int xx, int yy, double ww, double hh, char s): x(xx), y(yy), wFactor(ww), hFactor(hh), shapeNum(s) {visibleShape=0;shapeNum=-1;};

//Copy constructor necessary for support of vector::push_back() with visibleShape
Hyp(const Hyp &other)
{
    x = other.x;
    y = other.y;
    wFactor = other.wFactor;
    hFactor = other.hFactor;
    shapeNum = other.shapeNum;
    xmin = other.xmin;
    xmax = other.xmax;
    ymin = other.ymin;
    ymax = other.ymax;
    int visShapeSize = (xmax-xmin+1)*(ymax-ymin+1);
    visibleShape = new double[visShapeSize];
    for (int ind=0; ind<visShapeSize; ind++)
    {
        visibleShape[ind] = other.visibleShape[ind];
    }
};

~Hyp(){delete[] visibleShape;};

};

Wenn ich ein Hyp-Objekt erstelle, visibleShape Speicher zuordne / schreibe und das Objekt mit vector :: push_back einem Vektor hinzufüge, funktioniert alles wie erwartet: Die Daten, auf die visibleShape zeigt, werden mit dem copy-Konstruktor kopiert.

Aber wenn ich vector :: erase verwende, um eine Hyp aus dem Vektor zu entfernen, werden die anderen Elemente korrekt verschoben, AUSSER die Zeigermitglieder visibleShape, die jetzt auf falsche Adressen zeigen! Wie vermeide ich dieses Problem? Vermisse ich etwas?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage