QTypeInfo: document Q_PRIMITIVE_TYPE existing practice
Despite the documentation requiring Q_PRIMITIVE_TYPEs to be PODs, existing practice in Qt (QFixed, QFlags, QUuid) is to allow constructors on primitive types as long as every bit pattern represents a valid object (ie. memory doesn't have to be initialised to hold an object of the type) and memcpy() can be used to create an independent copy of the object (memcpy()ing QString, e.g., while creating two valid objects, doesn't create independent copies). Change-Id: Ia85d48b89f6cc84e69ea76719eab9a858d247ad6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>bb10
parent
1c20c3f294
commit
39b4578156
|
|
@ -2518,7 +2518,9 @@ int qrand()
|
|||
|
||||
\list
|
||||
\li \c Q_PRIMITIVE_TYPE specifies that \a Type is a POD (plain old
|
||||
data) type with no constructor or destructor.
|
||||
data) type with no constructor or destructor, or else a type where
|
||||
every bit pattern is a valid object and memcpy() creates a valid
|
||||
independent copy of the object.
|
||||
\li \c Q_MOVABLE_TYPE specifies that \a Type has a constructor
|
||||
and/or a destructor but can be moved in memory using \c
|
||||
memcpy().
|
||||
|
|
@ -2531,6 +2533,11 @@ int qrand()
|
|||
|
||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 38
|
||||
|
||||
An example of a non-POD "primitive" type is QUuid: Even though
|
||||
QUuid has constructors (and therefore isn't POD), every bit
|
||||
pattern still represents a valid object, and memcpy() can be used
|
||||
to create a valid independent copy of a QUuid object.
|
||||
|
||||
Example of a movable type:
|
||||
|
||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 39
|
||||
|
|
|
|||
Loading…
Reference in New Issue