On Tue, 4 Feb 2020 at 15:40, Volker Hilsheimer <volker.hilshei...@qt.io> wrote:
> >> This works, but now you are encoding the visual hierarchy of the widgets 
> >> in two places: when asking the presumed parent to create the widgets; and 
> >> when setting up the layout, which might do things differently (esp once 
> >> you start refactoring complex UIs).#
> >
> > That's not a problem. The code simply behaves as if you would have used the 
> > current constructors that take a parent parameter.
> >
> > Ownership transfers between different qt parents don't violate the 
> > invariant. And they continue to work just like before.
>
>
> So how is the above usage of makeChild an improvement over calling operator 
> new to instantiate your objects?

The result of makeChild never leaks.

> > But that just means that QBoxLayout::addWidget(std::unique_ptr<>) has to 
> > behave imho saner in that edge case and actually delete the widgets that 
> > were added but never parented. (And I should really implement that to show 
> > how it would work.)
>
>
> That seems like a terrible idea. One of the layout’s jobs is to set up the 
> parent/child hierarchy so that you as a developer don’t have to.

I don't see how that idea changes that.

> Do we really want to make it harder for people to write UIs just because the 
> resulting code doesn’t satisfy a C++ idiom?

It's not a question of satisfying idioms for the sake of satisfying
idioms, it's a question of avoiding bugs that we know
based on decades of experience to be difficult to avoid with raw pointers.

> If you don’t care about the things that QObject/QWidget does for you, then 
> don’t use QObject/QWidget. And if you do use QObject/QWidget and get a 
> consistent object model from it, then I’m really not convinced that adding 
> smart pointers to the API is making the code clearer, or in any way more 
> explicit. It’s not like the ability of using std::unique_ptr means that 
> people no longer have to be familiar with Qt’s basic concepts to use it 
> correctly.

Correct, but if code moves a std::unique_ptr into a function call
argument, I know that ownership is transferred, by just glancing at
the code. With a raw pointer, I don't know that.
_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to