Extend container overview documentation, mention Q_DECLARE_TYPEINFO
The container overview documentation did not mention Q_DECLARE_TYPEINFO and the related optimizations. This patch adds a short paragraph about it. Task-number: QTBUG-86584 Pick-to: 6.0 Change-Id: I5b0b8ce92a47da5f0398cc413fbf3e07b0921e59 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
This commit is contained in:
parent
6c442ddbf5
commit
d545fbb61b
@ -527,6 +527,29 @@
|
||||
with the expected number of items before you insert the items.
|
||||
The next section discusses this topic in more depth.
|
||||
|
||||
\section1 Optimizations for Primitive and Relocatable Types
|
||||
|
||||
Qt containers can use optimized code paths if the stored
|
||||
elements are relocatable or even primitive.
|
||||
However, whether types are primitive or relocatable
|
||||
cannot be detected in all cases.
|
||||
You can declare your types to be primitive or relocatable
|
||||
by using the Q_DECLARE_TYPEINFO macro with the Q_PRIMITIVE_TYPE
|
||||
flag or the Q_RELOCATABLE_TYPE flag. See the documentation
|
||||
of Q_DECLARE_TYPEINFO for further details and usage examples.
|
||||
|
||||
If you do not use Q_DECLARE_TYPEINFO,
|
||||
Qt will use
|
||||
\l {https://en.cppreference.com/w/cpp/types/is_trivial} {std::is_trivial_v<T>}
|
||||
to indentify primitive
|
||||
types and it will require both
|
||||
\l {https://en.cppreference.com/w/cpp/types/is_trivially_copyable} {std::is_trivially_copyable_v<T>}
|
||||
and
|
||||
\l {https://en.cppreference.com/w/cpp/types/is_destructible} {std::is_trivially_destructible_v<T>}
|
||||
to identify relocatable types.
|
||||
This is always a safe choice, albeit
|
||||
of maybe suboptimal performance.
|
||||
|
||||
\section1 Growth Strategies
|
||||
|
||||
QList<T>, QString, and QByteArray store their items
|
||||
|
@ -3995,12 +3995,19 @@ bool qunsetenv(const char *varName)
|
||||
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:
|
||||
Example of a relocatable type:
|
||||
|
||||
\snippet code/src_corelib_global_qglobal.cpp 39
|
||||
|
||||
Qt will try to detect the class of a type using std::is_trivial or
|
||||
std::is_trivially_copyable. Use this macro to tune the behavior.
|
||||
Qt will try to detect the class of a type using
|
||||
\l {https://en.cppreference.com/w/cpp/types/is_trivial} {std::is_trivial_v<T>}
|
||||
to indentify primitive
|
||||
types and it will require both
|
||||
\l {https://en.cppreference.com/w/cpp/types/is_trivially_copyable} {std::is_trivially_copyable_v<T>}
|
||||
and
|
||||
\l {https://en.cppreference.com/w/cpp/types/is_destructible} {std::is_trivially_destructible_v<T>}
|
||||
to identify relocatable types.
|
||||
Use this macro to tune the behavior.
|
||||
For instance many types would be candidates for Q_RELOCATABLE_TYPE despite
|
||||
not being trivially-copyable.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user