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

时间:2017-09-07 15:35:31

标签: c++ qt copy-constructor qvector rule-of-three

我正在尝试关注rule of three,但这样做会导致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;
}

现在我将一组&#39; Shape&#39;使用QSort函数的qSort按区域划分对象。

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

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

到目前为止,这个形状列表被编辑和操作,但到目前为止,这是唯一一个Shape形状列表变得不可访问的时间。是什么原因以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

据我所知,由于您在复制构造函数参数列表中使用@JsonProperty,因此QVector只是浅层复制而不是深度复制。这是因为QVector是implicitly shared container

删除const应该有效,但更好的解决办法可能是明确复制整个向量(例如使用const),而不仅仅是使用QVector的memcopy运算符