[Interest] QSharedDataPointer detach too much ( don't call const )

Michal Lazo xlazom00 at gmail.com
Thu Sep 20 13:19:47 CEST 2018


Sorry
I just found, there will be just one detach.
but still I wasn't aware that it don't call cost variant.
So thx for that link  http://eel.is/c++draft/over.match

On Thu, Sep 20, 2018 at 1:15 PM Michal Lazo <xlazom00 at gmail.com> wrote:

> But for example
>
> http://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/text/qtextcursor.cpp#n1487
> in this code I found at least 4 x detach
> void QTextCursor::deleteChar()
> {
> if (!d || !d->priv)    1x detach
> return;
>
> if (d->position != d->anchor)            2x detach removeSelectedText();
> return; }
> {
> if (!d->canDelete(d->position))       only 1x detach
> return;
> d->adjusted_anchor = d->anchor = d->priv->nextCursorPosition(d->anchor,
> QTextLayout::SkipCharacters);    1x detach
> d->remove();
> d->setX();
> }
>
> On Thu, Sep 20, 2018 at 1:01 PM Giuseppe D'Angelo via Interest <
> interest at qt-project.org> wrote:
>
>> On 20/09/18 12:43, Michal Lazo wrote:
>> > "So my whole C++ world just changed."
>> > Can you point me to right article in C++ documentation ?
>>
>> http://eel.is/c++draft/over.match
>>
>> See in particular [over.match.funcs] ยง11.3.1.4 , and then you need to
>> reason about the implications for the overload resolution.
>>
>>
>> > So Qt devs I found some code for example
>> >
>> http://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/text/qtextcursor.cpp#n1151
>> > And it looks like it should be better to call const variant
>> > what do you think ??
>>
>> Possibly, but what's the big drama about that line?
>>
>>
>> It's not a mistery that QSharedDataPointer is very prone to "accidental"
>> detaches, so its usage is frowned upon in new code, in favour of
>> QExplictlySharedDataPointer (which however requires manual calls to
>> detach(), and one needs to remember about them).
>>
>> For instance, in a setter such as
>>
>> > void MyClass::setFoo(int newFoo) {
>> >     if (d->foo == newFoo)
>> >         return;
>> >     d->foo = newFoo;
>> > }
>>
>> (assuming d is a QSharedDataPointer<MyClassPrivate>) the d->foo access
>> in the if is supposed to be "readonly", yet it happily detaches the
>> private, even if the new value passed to the setter is identical to the
>> old value and thus one might expect that nothing needs to be done.
>>
>> (No, noone is porting QTextCursor away from QSharedDataPointer at this
>> moment in time.)
>>
>>
>> My 2 c,
>> --
>> Giuseppe D'Angelo | giuseppe.dangelo at kdab.com | Senior Software Engineer
>> KDAB (France) S.A.S., a KDAB Group company
>> Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com
>> KDAB - The Qt, C++ and OpenGL Experts
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20180920/011ef585/attachment.html>


More information about the Interest mailing list