Allan Sandfeld Jensen
kde at carewolf.com
Thu Aug 8 11:54:32 CEST 2019
On Thursday, 8 August 2019 11:33:04 CEST Philippe wrote:
> > No. When you call detach(), you're in a mutating function of the object
> > and you can assume that you're the only thread executing on a member
> > function of that thread, because if that's not the case, you're in UB
> > land. Only const methods are allowed to execute concurrently on the same
> > object. Mutators must get exclusive access.
> Absolutly right, but a method "isDetached()" which is const
> has no usefulness on its own, independently from a detach() procedure.
> This is the purpose of my orginal remark.
It has uses when combined with move-like semantics, when it is detached it
makes sense to perform in-place transforms on the "shared" data, but it if
isn't that would trigger two iterations over the data, first the detach
triggering a copy, and then the iteration over the data transforming it. If it
is shared, you can just iterate over the data read-only putting the result
into a new object. This is used many places with QImage.
Note though that QImage has a second use of isDetached() since QImage detach()
also copies user provided data even when not shared.
More information about the Development