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

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

解决方法

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

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

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

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...