From d545fbb61b699802e9ae1a3c19f4c4bef724fbda Mon Sep 17 00:00:00 2001 From: Andreas Buhr Date: Tue, 17 Nov 2020 16:36:02 +0100 Subject: 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 Reviewed-by: Andrei Golubev --- src/corelib/doc/src/containers.qdoc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/corelib/doc') diff --git a/src/corelib/doc/src/containers.qdoc b/src/corelib/doc/src/containers.qdoc index 9cda3f91d8..4a5de26f14 100644 --- a/src/corelib/doc/src/containers.qdoc +++ b/src/corelib/doc/src/containers.qdoc @@ -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} + 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} + and + \l {https://en.cppreference.com/w/cpp/types/is_destructible} {std::is_trivially_destructible_v} + to identify relocatable types. + This is always a safe choice, albeit + of maybe suboptimal performance. + \section1 Growth Strategies QList, QString, and QByteArray store their items -- cgit v1.2.3