On 7 May 2019, at 15:00, Volker Hilsheimer 
<volker.hilshei...@qt.io<mailto:volker.hilshei...@qt.io>> wrote:

On 6 May 2019, at 22:20, Lars Knoll <lars.kn...@qt.io<mailto:lars.kn...@qt.io>> 
wrote:
On 6 May 2019, at 20:23, André Pönitz 
<apoen...@t-online.de<mailto:apoen...@t-online.de>> wrote:

On Mon, May 06, 2019 at 07:41:05AM +0000, Lars Knoll wrote:
On 6 May 2019, at 09:30, Christian Kandeler
<christian.kande...@qt.io<mailto:christian.kande...@qt.io>> wrote:

On Sat, 04 May 2019 09:06:39 +0200 Allan Sandfeld Jensen
<k...@carewolf.com<mailto:k...@carewolf.com>> wrote:

On Samstag, 4. Mai 2019 00:43:10 CEST Thiago Macieira wrote:
On Friday, 3 May 2019 13:00:52 PDT Иван Комиссаров wrote:
Which should be considered bad practice and banned on an API
level

No way.

Are you going to forbid creation of QFile on the stack?

Perhaps QFile shouldn't be the same kind of base object type as
QWidgets? Or not use the same smart pointer.

Though even making QWidgets not allowed on the stack, while
sensible, would break a many of our tests, where we "abuse" that it
is technically possible in simple cases.

Doesn't almost every project create its main widget on the stack?

Not sure whether it’s most projects, but there certainly are users
doing it. And we’ve been using the pattern in our examples in some
cases as well. But I can relate to Allan that creating widgets on the
stack is bad style (as it conflicts with the way we memory manage
them), and if I’d have a choice today, I would probably prefer to
enforce them to be created on the heap by some means.

I wonder whether there's a solution in the following direction:

Have something like the following for each QObject derived class Foo
(for which it makes sense. E.g. perhaps all widgets, but not QFile):

[…]

The main benefits I see here that this scheme can co-exist with current
code, i.e. code bases could slowly opt-in and migrate step by step, and
it does not add the need to sprinkle user side code with the typical
smart pointer line noise.

Interesting idea. I sometimes thought that if we’d be creating Qt from scratch, 
one could make it all value based and have the objects on the heap hidden 
behind it. This would give something similar. As an added benefit, we could 
probably allocate the object and it’s private in one go without requiring the 
TLS hacks that https://codereview.qt-project.org/#/c/165445/ uses.

This could maybe bet combined with a custom template class handling our 
pointers (instead of unique_ptr) that understands the parent/child ownership 
model, plus typedefs for the different QObject based classes in the Qt 
namespace.


Can you explain what you mean with “understands the parent/child-ownership 
model”?

Are you suggesting a unique_ptr-like template class that doesn’t destroy the 
object in its destructor if that object still has a parent?

It could be something like that. One option could be to behave like a 
unique_ptr if the object doesn’t have a parent, and like a weak pointer 
otherwise. One would have to try it out though, to see whether that would give 
semantics that are intuitive and feel right to users.

Cheers,
Lars



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

Reply via email to