vector :: borrar con miembro puntero

Estoy manipulando vectores de objetos definidos de la siguiente manera:

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;};

};

Cuando creo un objeto Hyp, asigno / escribo memoria en visibleShape y agrego el objeto a un vector con vector :: push_back, todo funciona como se esperaba: los datos apuntados por visibleShape se copian usando el constructor de copias.

Pero cuando uso vector :: erase para eliminar un Hyp del vector, los otros elementos se mueven correctamente ¡EXCEPTO los miembros del puntero visibleShape que ahora apuntan a direcciones incorrectas! ¿Cómo evitar este problema? ¿Me estoy perdiendo de algo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta