作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Qt 容器类 QList<T>
, QVector<T>
等要求它们的元素类型是可复制的。从 C++11 开始,STL 容器要求它们的元素类型只能是可复制或可 move 的。为什么 Qt 容器不支持仅 move 元素类型?
最佳答案
Qt bug #54685 Qt 开发人员明确确认,由于 Qt 容器的隐式共享原则,不支持(也永远不会)支持仅 move 类型。
当您将一个 Qt 容器复制到另一个 Qt 容器时,您并不是在进行深度复制——容器在内部共享它们的内容。只有在容器上调用修改函数时,它才会分离,创建自己的本地内容副本。这允许 Qt 容器通过信号和插槽(这必然是按值)传递,而不会降低性能。
当包含的类型是仅 move 时,这当然是不可能的。并且按值传递容器(不复制其内容)的能力是 Qt 元对象机制的基础,所以我认为它不能重新设计。 Qt API 依赖于隐式共享并按值传递容器,即使只 move 容器将通过引用传递,因此没有简单的出路。
关于qt - 为什么 Qt 的容器类不允许可 move 、不可复制的元素类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32584665/
我是一名优秀的程序员,十分优秀!