How to write entire QVector to a binary file?
-
@J-Hilk Thanks, one thing which I am not sure about: What would happen if I use
const QVector<double>&
instead ofQVector<double>
, will it still copy the data if the connection type isQt:QueuedConnection
or will it just copy the reference for the vector? -
@CJha said in How to write entire QVector to a binary file?:
will it still copy the data if the connection type is Qt:QueuedConnection or will it just copy the reference for the vector?
In short: Yes they will be copied.
For more details take a look at this => https://www.embeddeduse.com/2013/06/29/copied-or-not-copied-arguments-signals-slots/ -
@CJha
According to @KroMignon's linkThe conclusion from the above results is that we should pass arguments to signals and slots by const reference and not by value. This advice is true for both direct and queued connections. Even if the sender of the signal and the receiver of the slot are in different threads, we should still pass arguments by const reference.
If you have both signal & slot declared with
QVector<double> vec
and you change both to haveconst QVector<double>&
, you reduce 3 copies to 1.Having said that: I do get lost as to what gets copied, aren't we only talking about the
QVector
structure and not the data it references?? -
@CJha said in How to write entire QVector to a binary file?:
If it's a copy then I assume it is always going to be the data
No, because Qt containers use copy-on-write. See https://doc.qt.io/qt-5/implicit-sharing.html