From ade0d8361c130ef46b4f2ebe2c8e9999740b93d2 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Thu, 1 Aug 2013 14:26:22 -0400 Subject: add QScopedPointerDeleteLater, a custom deleter for QObjects This is a custom deleter for QObjects that are participating in an event loop (e.g. waiting for signals to complete a task), which need to be deleted using deleteLater() rather than just delete. Change-Id: I3084ea28a6829a299c7400006c617fc23cf15160 Reviewed-by: J-P Nurmi Reviewed-by: Thiago Macieira --- src/corelib/tools/qscopedpointer.cpp | 3 +++ src/corelib/tools/qscopedpointer.h | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index cf2f9bee0c..047fcbfc30 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -95,6 +95,9 @@ QT_BEGIN_NAMESPACE this handler for pointers that were allocated with \c{new []}. \li QScopedPointerPodDeleter - deletes the pointer using \c{free()}. Use this handler for pointers that were allocated with \c{malloc()}. + \li QScopedPointerDeleteLater - deletes a pointer by calling \c{deleteLater()} + on it. Use this handler for pointers to QObject's that are actively + participating in a QEventLoop. \endlist You can pass your own classes as handlers, provided that they have a public diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index c4a148c4e4..dba37dae23 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -83,6 +83,17 @@ struct QScopedPointerPodDeleter static inline void cleanup(void *pointer) { if (pointer) free(pointer); } }; +#ifndef QT_NO_QOBJECT +template +struct QScopedPointerObjectDeleteLater +{ + static inline void cleanup(T *pointer) { if (pointer) pointer->deleteLater(); } +}; + +class QObject; +typedef QScopedPointerObjectDeleteLater QScopedPointerDeleteLater; +#endif + template > class QScopedPointer { -- cgit v1.2.3