为什么Qt的容器类不允许可移动的,不可复制的元素类型?
发布时间:2020-12-16 06:03:49 所属栏目:百科 来源:网络整理
导读:Qt容器类别QList T,QVector T等等要求它们的元素类型是可复制的.自C 11以来,STL容器要求其元件类型仅可复制或移动.为什么Qt容器不支持只移动元素类型? 解决方法 由于Qt容器的隐含共享原理,Qt bug #54685已经向Qt开发人员明确确认,只有移动类型不支持(并且永
Qt容器类别QList< T>,QVector< T>等等要求它们的元素类型是可复制的.自C 11以来,STL容器要求其元件类型仅可复制或移动.为什么Qt容器不支持只移动元素类型?
解决方法
由于Qt容器的隐含共享原理,Qt bug #54685已经向Qt开发人员明确确认,只有移动类型不支持(并且永远不会).
当您将一个Qt容器复制到另一个容器时,您不会做深层拷贝 – 容器在内部共享其内容.只有当在容器上调用修改函数时,它才会分离,创建自己的本地内容副本.这样允许Qt容器通过信号和插槽(这是必须的值)传递,而不会使性能下降. 当包含的类型是只移动的时候,这当然是不可能的.而通过值传递容器的能力(不复制其内容)是Qt的元对象机制的基础,所以我不认为它可以重新设计. Qt API依赖于隐式共享,并通过值传递容器,即使只有通过引用传递唯一的容器,所以没有简单的出路. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |