Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将QVector从信号传递到不同线程中的插槽是否会导致数据复制?_C++_Qt_Qtcore_Qt Signals_Qvector - Fatal编程技术网

C++ 将QVector从信号传递到不同线程中的插槽是否会导致数据复制?

C++ 将QVector从信号传递到不同线程中的插槽是否会导致数据复制?,c++,qt,qtcore,qt-signals,qvector,C++,Qt,Qtcore,Qt Signals,Qvector,我读到QVector类使用隐式数据共享来最大化资源使用和最小化复制。我不知道向不同线程中的插槽发送带有QVector参数的信号是否会导致数据复制!这些问题也与这个问题有关: 但我无法从这些观点中理解要点。很明显,我的问题是: 我有一个信号: void someSignal(QVector<int> values); void someSignal(QVector值); 和一个插槽: void someSlot(QVector<int> values); void

我读到QVector类使用隐式数据共享来最大化资源使用和最小化复制。我不知道向不同线程中的插槽发送带有QVector参数的信号是否会导致数据复制!这些问题也与这个问题有关:

但我无法从这些观点中理解要点。很明显,我的问题是:

我有一个信号:

void someSignal(QVector<int> values);
void someSignal(QVector值);
和一个插槽:

void someSlot(QVector<int> values);
void someSlot(QVector值);
它们在不同的线程中,我将它们连接起来。因此,连接类型是Qt::QueuedConnection。我还应该声明QVector元素在插槽中没有修改。它们只是阅读而已

发射信号是否会导致QVector元素被复制

发射信号是否会导致QVector元素被复制

不,政府也很清楚:

隐性分享发生在幕后;程序员不需要担心它。即使在多线程应用程序中,也会发生隐式共享,例如

仅强调文件中该部分的第一段:

Qt对其许多值类使用了一种称为隐式共享的优化,特别是QImage和QString。从Qt4开始,隐式共享类可以像其他任何值类一样安全地跨线程复制。它们是完全可重入的。隐性共享实际上是隐性的