为什么Qt的容器类不允许可移动的,不可复制的元素类型?

Qt容器类别QList< T>,QVector< T>等等要求它们的元素类型是可复制的.自C 11以来,STL容器要求其元件类型仅可复制或移动.为什么Qt容器不支持只移动元素类型?

解决方法

由于Qt容器的隐含共享原理,Qt bug #54685已经向Qt开发人员明确确认,只有移动类型不支持(并且永远不会).

当您将一个Qt容器复制到另一个容器时,您不会做深层拷贝 – 容器在内部共享其内容.只有当在容器上调用修改函数时,它才会分离,创建自己的本地内容副本.这样允许Qt容器通过信号和插槽(这是必须的值)传递,而不会使性能下降.

当包含的类型是只移动的时候,这当然是不可能的.而通过值传递容器的能力(不复制其内容)是Qt的元对象机制的基础,所以我不认为它可以重新设计. Qt API依赖于隐式共享,并通过值传递容器,即使只有通过引用传递唯一的容器,所以没有简单的出路.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...