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?