在 QVector 插入函数后无法访问的点
Posted
技术标签:
【中文标题】在 QVector 插入函数后无法访问的点【英文标题】:points not accessible after QVector insert function 【发布时间】:2017-09-07 15:35:31 【问题描述】:我正在尝试关注rule of three,但是这样做会导致 QVector 的插入功能出现问题。
添加复制构造函数和析构函数后,我的程序将产生一个点向量不再可访问的错误,因此复制构造函数无法重新分配点。
这是我的代码中的一些 sn-ps
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 使用 QVector 函数。
void T::sortByArea()
qSort(listOfShapes);
当这个方法结束时。我发现其中一个形状现在有一个值为<not accessible>
的mList。只有在使用 QVector::insert(int i, const T &value) 时才会出现在排序中。
到目前为止,此形状列表已被编辑和操作,但这是迄今为止唯一一次无法访问形状列表。原因是什么?我应该如何解决这个问题?
【问题讨论】:
【参考方案1】:据我所知,由于您在复制构造函数参数列表中使用了const
,因此 QVector 只是浅复制而不是深复制。这是因为 QVector 是一个implicitly shared container。
删除const
应该可行,但更好的解决方案可能是显式复制整个向量(例如使用memcopy
),而不仅仅是使用QVector 的=
运算符。
【讨论】:
以上是关于在 QVector 插入函数后无法访问的点的主要内容,如果未能解决你的问题,请参考以下文章
从Azure获取令牌以访问Microsoft Graph后无法调用函数
Win10插入U盘后双击无法打开,无法访问,显示设备未就绪;驱动哥帮你解决