I recommend you to use the data() / constData() API to reduce the risk of mistakes.
I personaly used a similar class, but in my case, the API names are called data() / mutableData() because I wish even more hilight on state changes. Philippe On Thu, 20 Sep 2018 13:19:47 +0200 Michal Lazo <xlazo...@gmail.com> wrote: 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 <xlazo...@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@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.dang...@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@qt-project.org >>> http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest