首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vector::erase with pointer成员

vector::erase with pointer成员
EN

Stack Overflow用户
提问于 2010-04-21 02:49:29
回答 2查看 1.8K关注 0票数 4

我正在操作对象的向量,如下所示:

代码语言:javascript
复制
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现在指向错误的地址之外,其他元素都被正确地移动了!如何避免这个问题?我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 02:56:35

我想你遗漏了Hyp的一个重载赋值操作符。

票数 2
EN

Stack Overflow用户

发布于 2010-04-21 02:58:19

我认为您可能在Hyp类中遗漏了赋值运算符=

Hyp& operator = (const Hyp& rhs);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2677770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档