[Interest] QExplictlySharedDataPointer vs QSharedPointer

Elvis Stansvik elvstone at gmail.com
Thu Sep 8 21:12:14 CEST 2016


2016-09-08 18:50 GMT+02:00 Elvis Stansvik <elvstone at gmail.com>:
> Hi all,
>
> QSharedData and QImplicitlySharedDataPointer (QISDP) is a common
> combination used to implement implicit sharing, both in Qt itself and
> in Qt-using projects.
>
> QExplicitlySharedDataPointer (QESDP) is a cousin of QISDP with the
> important difference that you have to explicitly call detach() to
> detach from the underlying data.
>
> QSharedPointer is Qt's own "smart pointer" to shared data, similar to
> std::shared_ptr.
>
> I'm curious about the role/use for QESDP compared to QSharedPointer.
> The main differences I can see is
>
>  * QESDP requires that the pointed-at object derive from QSharedData.
>  * QSharedPointer provide no easy means to detach/make copies of the
> underlying object
>
> But regarding this second difference, wouldn't it be easy enough to
> just take the raw pointer to the underlying object with data(), and
> make a copy of that?
>
> In short, I fail to see a strong use case for QESDP compared to using
> a QSharedPointer. I'm probably missing something.
>
> Does anyone know of a code base that makes liberal use of QESDP, or
> could you share how you're making use of it? It's easy to find uses
> for the implicit variant (QISDP).
>
> In general I'm curious to hear advise about the do's and don'ts when
> it comes to QISDP, QESDP and QSharedPointer when designing the
> innermost parts (data model) of a Qt application. I've heard some
> warning words about using QISDP too library, because of the risks of
> "accidental detach".

Here I meant "liberally" of course, not "library".

Elvis

>
> Thanks in advance,
> Elvis



More information about the Interest mailing list