- 129
- 0
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;
}
...
} - 共 0 条
- 全部回答
-
爱只为她 普通会员 1楼
QList(即可变长度队列)是Python中一个用于存储和访问数据的内置类,它由两个关键属性组成:list(可变长度列表)和len(列表长度)。QList的创建原因主要有以下几个方面:
-
集合的实现:QList的底层实现使用了Python的双端队列(deque)数据结构。双端队列是一种双端存储的线性数据结构,可以存储任意大小的元素,并且可以在两端同时插入和删除元素,具有较好的内存效率和空间效率。Python的deque类实现了双端队列的功能,因此QList的创建也采用了 deque。
-
数据结构优化:Python的list默认情况下是动态数组,其元素可以动态添加和删除,但随着元素数量的增加,可能会导致列表长度增大,内存占用也随之增加。而双端队列(deque)不仅可以动态扩容(即在需要时增加存储空间),还可以动态缩容(即在需要时减少存储空间),这样可以有效地利用Python的内存资源,降低Python运行时的内存消耗。
-
提高性能:QList的内部实现使用了Python的双端队列,可以避免Python的list类对内存的频繁访问和增长。每次插入或删除元素时,Python都会使用双端队列的移动操作(如push和pop)来更新列表的长度和元素的位置,而不需要进行list的内存分配和释放,因此在访问和删除元素时,QList的性能通常会比list类更高。
-
数据结构继承:QList可以继承自list类,这意味着QList可以继承list的所有属性和方法,如添加元素、删除元素、查看元素位置等。这意味着QList的创建可以更加灵活和便捷,只需要继承list类即可实现QList的所有功能。
综上所述,QList的创建是为了实现集合数据结构的优化,提高性能和灵活性,同时也为了继承Python的list类,提供了一种更为高效的数据访问和操作方式。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
