Qlist 拷贝构造产生的原因
1) 如下代码,RowOfData rowData = tableData[row]; 触发RowOfData拷贝构造
2)tableDatarow = item; 此时tableDatarow也会触发QtParameter拷贝构造,并调用 QList<T>::node_copy执行深拷贝,是为什么呢,是编译器
影响的么,去掉RowOfData rowData = tableData[row];就不会执行QtParameter拷贝构造与 QList<T>::node_copy。
3)看似多余的RowOfData rowData = tableData[row];,为什么会影响后面Qistx的深拷贝呢,是因为RowOfData rowData = tableData[row];调用了浅拷贝,编译器为避免出错,让tableDatarow执行了拷贝构造么。不是很确定,很诡异的一个问题。
QtParameter::QtParameter( const QtParameter& rhs) :QVariant(rhs)
{
}
class RowOfData : QList<QtParameter>
{
public:
RowOfData(const RowOfData& rhs);
private:
}
class TableData
{
public :
TableData();
virtual ~TableData();
bool setItem(int row, int col, QtParameter item);
protected:
QStringList columnHeader;
QStringList rowHeader;
QStringList rowFooter;
QList< RowOfData > tableData;
}
bool TableData::setItem(int row, int col, QtParameter item)
{
if(row<rowCount())
{
RowOfData rowData = tableData[row];
/*useless here and impact the tableData[row][col] copy constructer× */
if( col < tableData.at(row).size() )
{
tableData[row][col] = item;
}
}
}
template <typename T>
Q_INLINE_TEMPLATE void QList<T>::node_copy(Node *from, Node *to, Node *src)
{
Node *current = from;
if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) {
QT_TRY {
while(current != to) {
current->v = new T(*reinterpret_cast<T*>(src->v));
++current;
++src;
}
} QT_CATCH(...) {
while (current-- != from)
delete reinterpret_cast<T*>(current->v);
QT_RETHROW;
}
...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论