QVector 插入功能后无法访问的点

points not accessible after QVector insert function

提问人:Privatized 提问时间:9/7/2017 最后编辑:Privatized 更新时间:9/8/2017 访问量:291

问:

我正在尝试遵循三法则,但是这样做会导致 QVector 的插入功能出现问题。

添加复制构造函数和析构函数后,我的程序将产生一个错误,即点的向量不再可访问,因此复制构造函数无法重新分配点。

以下是我的代码中的一些片段

QVector<QPointF> *mList = nullptr;
int area;

Shape::Shape()
{
    mList = new QVector<QPointF>();
    area = 0;
}
Shape::Shape(const Shape &obj)
{
    mList = new QVector<QPointF>();
    mList = *obj.mList;
    area = obj.area;
}
Shape::~Shape()
{
    delete mList;
}

现在,我使用 qSort(使用 QVector 函数)按区域对一组“Shape”对象进行排序。

void T::sortByArea()
{     
    qSort(listOfShapes);
}

当此方法完成时。我发现其中一个形状现在有一个 mList,其值为 .仅当使用 QVector::insert(int i, const T &value) 时,才会在排序中出现。<not accessible>


在此之前,此形状列表将被编辑和操作,但这是迄今为止唯一一次无法访问形状列表。原因是什么,我应该如何解决这个问题?

C++ Qt 复制构造函数 QVECTOR 三法则

评论


答:

0赞 mahesh 9/8/2017 #1

据我所知,由于您在复制构造函数参数列表中使用,因此 QVector 只是浅复制而不是深复制。这是因为 QVector 是一个隐式共享容器const

删除 应该有效,但更好的解决方案可能是显式复制整个向量(例如使用 ),而不仅仅是使用 QVector 的运算符。constmemcopy=