[Development] QIntrusiveSharedPointer
Philippe
philwave at gmail.com
Thu Aug 8 11:33:04 CEST 2019
> 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.
Philippe
On Thu, 08 Aug 2019 12:00:11 +0300
"Mutz, Marc via Development" <development at qt-project.org> wrote:
> On 2019-08-08 11:29, Philippe wrote:
> > Yet, what is the usefullness of qIntrusiveDetached()?
>
> qIntrusiveDetached() makes it possible to use std::atomic ref counts
> (which don't have ref() and deref()). It's separate from
> qIntrusiveClone() because the latter is more often overloaded than the
> former (cf. QTimeZone followup change).
>
> > Because the result depends on a relaxed load, hence the moment after
> > qIntrusiveDetached() was evaluated, rechecking qIntrusiveDetached()
> > could give a different result.
>
> 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.
>
> HTH,
> Marc
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> https://lists.qt-project.org/listinfo/development
More information about the Development
mailing list