vector :: erase avec un membre du pointeur

Je manipule des vecteurs d’objects définis comme suit:

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

Lorsque je crée un object Hyp, alloue / écrit de la mémoire à visibleShape et que je l’ajoute à un vecteur avec vector :: push_back, tout fonctionne comme prévu: les données pointées par visibleShape sont copiées à l’aide du constructeur de copie.

Mais lorsque j’utilise vector :: erase pour supprimer un Hyp du vecteur, les autres éléments sont déplacés correctement SAUF les membres du pointeur visibleShape qui pointent maintenant vers de mauvaises adresses! Comment éviter ce problème? Est-ce que je manque quelque chose?

Je pense qu’il vous manque un opérateur d’affectation surchargé pour Hyp .

Je pense que vous pourriez manquer l’opérateur d’affectation = dans la classe Hyp.

Hyp& operator = (const Hyp& rhs);