On 2019-05-20 11:25, Giuseppe D'Angelo via Development wrote:
Hi,

Il 19/05/19 18:54, Thiago Macieira ha scritto:
But I think all Qt classes should go beyond that, unless they have VERY good reasons not to do so (and document so). The moved-from object should also be in a valid state so all the accessor and mutation API in the class can operate in the object without ill effects. What they actually do, we can't tell, since
the initial state is unknowable. So apply the principle of GIGO.

So basically the same stance as the Standard Library? One should be
able to invoke any function without preconditions on a moved-from
object?

Except that the standard library has an easy way of implementing that, since there're no PIMPLs. For a PIMPLed class, it means that the move constructor either must allocate memory or that each and every PIMPLed value class needs to have a static unsharable null instance. This is relatively easy for some, but try that for QBrush. Or we litter all member functions with nullptr checks.

I agree that a moved-from object should be in the same state as a default-constructed one. I disagree with that that state must always be a valid value of the class. I agree with Stepanov that the default constructor should be establishing the partially-formed state, ie, only destruction and assignment are valid. It _can_ do more, but only if it stays noexcept.

Or maybe we don't disagree at all and Thiago would accept allocating memory (or, by extension, anything that's noexcept(false)) as a very good reason to have a nullptr d?

Thanks,
Marc
_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to