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

Ral*_*zky 14 qt qlist move-semantics c++11 qvector

Qt的容器类QList<T>,QVector<T>等需要它们的元素类型是可复制.从C++ 11开始,STL容器要求它们的元素类型只能是可复制的或可移动的.为什么Qt容器不支持仅移动元素类型?

Rei*_*ica 15

Qt bug#54685明确证实了Qt开发人员由于Qt容器的隐式共享原则,不支持(并且永远不会)支持仅移动类型.

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

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