Do I understand correctly that proposition of usage of the shared_ptr instead 
of unique_ptr is to have a drop-in replacement for a QPointer (weak_ptr)?
Can we implement It somehow with the unique_ptr?

And what about the QObject::deleteLater() method? I always found it pretty ugly 
(what if that «later» will never happen, e.g. event loop gets interrupted?), 
but it has the use case - to safely delete an object after the slot was 
invoked. Any ideas how this should look like with smart pointers?

> 31 янв. 2020 г., в 15:14, Vitaly Fanaskov <vitaly.fanas...@qt.io> написал(а):
> 
> Hi Daniel,
> 
> 
>> I'm confused that there's zero discussion of the work I have done in showing 
>> how adding unique_ptr apis would look like. Surely, you have internally 
>> discussed that approach.
> Yes, I saw this patch (https://codereview.qt-project.org/c/qt/qtbase/+/260618 
> <https://codereview.qt-project.org/c/qt/qtbase/+/260618>). It looks good as 
> an example of using unique pointers.
> 
> My personal opinion that we have another fundamental problem in the 
> implementation of parent-child relationship in Qt. Ditto for the related 
> interfaces. The problem is that everything is implemented with using raw 
> pointers and some implicit contracts (like, "a parent removes its children"). 
>  The proper solution is re-implement it using smart pointers. For example, 
> each QObject stores a vector of shared pointers to children and a weak 
> pointer to its parent. With this "simple" approach we can implement proper 
> API and get rid of entities we don't really need, like QPointer for example.
> 
> I don't think that adding another level of abstraction and introducing new 
> entities is such a good solution here. Better to solve a cause rather than 
> fight consequences.
> 
> 
>> How did you come to this conclusion?
> Let me elaborate a bit. My suggestion was in using smart pointers for newly 
> added API and transfer old API when we have time for it. It makes sense if we 
> decide using smart pointers, I think.
> 
> 
>> * There's existing tooling around unique_ptr, and there would be none for 
>> any wrappers.
> Which tooling do you mean?
> 
> On 1/31/20 2:23 PM, Daniel Teske wrote:
>> Hi, 
>> 
>> I'm confused that there's zero discussion of the work I have done in showing 
>> how adding unique_ptr apis would look like. Surely, you have internally 
>> discussed that approach. 
>> 
>> Also I'm sad to see that instead of using public mailing lists, you seem to 
>> have discussed this extensively internally. 
>> 
>>> For sure, it should only be a choice for newly designed API. 
>> How did you come to this conclusion? 
>>> 
>>> 1) Use std::*  smart pointers as-is. 
>>> 
>>> 2) Add Qt-style wrappers around std::* smart pointers and move old 
>>> implementations of Qt smart pointers to the Qt5Compact module. 
>>> 
>>> Both options have pros and cons. It would be useful to hear your 
>>> thoughts on it. It’s worth mentioning that some other options, like 
>>> using Qt smart pointers as-is, were also discussed. They were found less 
>>> suitable, but feel free to share your opinion if you disagree. 
>> 
>> Using a standard class as is the right answer, because: 
>> 
>> * Qt should position itself so that it benefits from innovation happening in 
>> the standard. Greater interoperability should be a goal. (Not just for smart 
>> pointers, but in general.) 
>> * There's existing tooling around unique_ptr, and there would be none for 
>> any wrappers. 
>> * Mixing std code and qt code is easier when they use the same vocabulary 
>> types. 
>> * The existing smart pointers in qt have less capable API than the std ones. 
>>    Expecting this to be different the next time seems foolish. 
>> * unique_ptr is 9 years old. It's behaviour is well understood in the wider 
>> C++ community. 
>> * There's a feeling that Qt has a NIH problem in the wider C++ community 
>> 
>> daniel 
>> 
>> 
>> _______________________________________________
>> Development mailing list
>> Development@qt-project.org <mailto:Development@qt-project.org>
>> https://lists.qt-project.org/listinfo/development 
>> <https://lists.qt-project.org/listinfo/development>
> -- 
> Best Regards,
> 
> Fanaskov Vitaly
> Senior Software Engineer
> 
> The Qt Company / Qt Quick and Widgets Team
> _______________________________________________
> Development mailing list
> Development@qt-project.org
> https://lists.qt-project.org/listinfo/development

_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to