From ff6156204d2cc33771540ef71500605817dc4911 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 9 Jul 2021 15:51:40 +0200 Subject: QColorTrcLut: hold in shared_ptr ... instead of raw pointers or QSharedPointer. Raw pointers are, of course, a no-no in modern code. In particular, when the result is then held in shared_ptr or QSharedPointer, make_shared or QSharedPointer::create() should be used to reduce number of memory allocations. Since this is private API, we're free to use std::shared_ptr, which does only half the atomic operations on copies, compared to QSharedPointer, so is more efficient. For either make_shared or QSharedPointer::create(), we need to work around the private ctor, which we do by inheriting a member-function local class from QColorTrcLut and make_shared'ing that. As a member-function-local class, it has access to the otherwise private parts of QColorTrcLut, including its default constructor. As a public subclass, shared_ptr has no problem performing the derived-to-base pointer adjustment in the return statement. This way, we can use make_shared even though our target's class' ctor is private. Change-Id: Icb11249b54cd5e544e692f6a0bf1f9dda1710454 Reviewed-by: Allan Sandfeld Jensen Reviewed-by: Friedemann Kleint --- src/gui/kernel/qguiapplication_p.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/gui/kernel/qguiapplication_p.h') diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index ca4ed3f12e..b98a1b9ecf 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -56,7 +56,6 @@ #include #include -#include #include #include @@ -68,6 +67,8 @@ # include "private/qshortcutmap_p.h" #endif +#include + QT_BEGIN_NAMESPACE class QColorTrcLut; @@ -332,9 +333,9 @@ private: static QGuiApplicationPrivate *self; static int m_fakeMouseSourcePointId; #ifdef Q_OS_WIN - QSharedPointer m_a8ColorProfile; + std::shared_ptr m_a8ColorProfile; #endif - QSharedPointer m_a32ColorProfile; + std::shared_ptr m_a32ColorProfile; bool ownGlobalShareContext; -- cgit v1.2.3