我在这里读到QVector类使用隐式数据共享来最大化资源使用并最小化复制。我不知道是否发出带有QVector参数的信号到不同线程中的插槽会导致数据复制!这些问题也与这个问题有关:
通过信号/槽位将QVector从工作线程传递到主线程
在Qt信号中发出QVector引用导致复制
但是我不能从中得到要点。显然我的问题是:
我有一个信号:
void someSignal(QVector<int> values);
和一个槽:
void someSlot(QVector<int> values);
它们在不同的线程中,我将它们连接起来。所以连接类型是Qt::QueuedConnection。我还应该说明,QVector元素在槽中没有被修改。它们只是被读取。
发出信号会导致QVector元素被复制吗?
发出信号会导致QVector元素被复制吗?
。隐式共享文档对此也很清楚:
隐式共享发生在幕后;程序员不需要担心它。即使在多线程应用程序中,隐式共享也会发生,正如在线程和隐式共享类中所解释的那样。
只是为了突出显示该部分文档的第一段:
Qt在它的许多值类中使用了一种称为隐式共享的优化,特别是QImage和QString。从Qt 4开始,隐式共享类可以安全地跨线程复制,就像任何其他值类一样。它们是完全可重入的。隐式共享真的是隐式的。