gpt4 book ai didi

qt - 为什么 Qt 的容器类不允许可 move 、不可复制的元素类型?

转载 作者:行者123 更新时间:2023-12-03 22:23:09 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com