Я манипулирую векторами объектов, которые определены следующим образом:
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;};
};
Когда я создаю объект Hyp, выделяю / записываю память в visibleShape и добавляю объект в вектор с помощью vector :: push_back, все работает как положено: данные, указанные в visibleShape, копируются с помощью конструктора копирования.
Но когда я использую vector :: erase для удаления Hyp из вектора, другие элементы перемещаются корректно, ЗА ИСКЛЮЧЕНИЕМ элементов указателя visibleShape, которые теперь указывают на неправильные адреса! Как избежать этой проблемы? Я что-то упустил?