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

前端之家收集整理的这篇文章主要介绍了为什么Qt的容器类不允许可移动的,不可复制的元素类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Qt容器类别QList< T>,QVector< T>等等要求它们的元素类型是可复制的.自C 11以来,STL容器要求其元件类型仅可复制或移动.为什么Qt容器不支持只移动元素类型?

解决方法

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

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

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

猜你在找的C&C++相关文章