QVECTOR插入功能后无法访问点

points not accessible after QVector insert function

本文关键字:访问 插入 功能 QVECTOR      更新时间:2023-10-16

我试图遵循三个规则,但是这样做是在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按QSORT将一组"形状"对象分类,该对象使用QSort。

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

此方法完成时。我发现其中一种形状具有一个具有<not accessible>值的MLIST。仅当使用qVector :: insert(int i,const t&amp; value)时才发生。


到目前为止,此形状列表已经进行了编辑和操纵,但这是到目前为止唯一无法访问形状列表的时间。原因是什么?我应该如何解决此问题?

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

删除const应该可以工作,但是更好的解决方案可能是明确复制整个向量(例如使用memcopy),而不仅仅是使用QVector的=操作员。