Qt QList-of-Qvectors-clear
在Qt文档中有一个示例,其中他们使用Qt QList-of-Qvectors-clear,qt,qlist,qvector,Qt,Qlist,Qvector,在Qt文档中有一个示例,其中他们使用 foreach (QVector<QPointF> row, m_data) row.clear(); m_data.clear(); foreach(QVector行,m_数据) row.clear(); m_data.clear(); 清除不仅无用,而且可能“有害” 它是无用的,因为QList::clear()将破坏它拥有的每一个T,有效地调用~T()。在您的例子中,这意味着您将为QList中的每个向量调用~QVector()。然
foreach (QVector<QPointF> row, m_data)
row.clear();
m_data.clear();
foreach(QVector行,m_数据)
row.clear();
m_data.clear();
清除
不仅无用,而且可能“有害”
它是无用的,因为QList::clear()
将破坏它拥有的每一个T,有效地调用~T()
。在您的例子中,这意味着您将为QList中的每个向量调用~QVector()
。然后,~QVector()
将为每个点调用~QPointF()
这可能对性能有害,因为QList和QVector使用写时复制。这意味着,当您复制一个列表时,您不会复制内部数据,但只要您执行修改其中一个列表的操作,就会发生复制
因此,如果m_data
与另一个QList共享其内部数据,则更改其任何元素(例如,对其中一个元素调用QVector::clear()
)将触发QList内部数据的硬拷贝。而且这个副本是完全无用的,因为您在调用m\u data.clear()
之后就丢弃了它
还值得注意的是:
foreach (QVector<QPointF> row, m_data)
row.clear();
引用Qt文件时,其无效:
因为foreach使用非常量创建容器的副本
变量的引用不允许修改原始变量
容器。它只影响副本,而副本可能不是您想要的
需要
foreach (QVector<QPointF> &row, m_data)
row.clear();