File tree Expand file tree Collapse file tree 1 file changed +31
-3
lines changed Expand file tree Collapse file tree 1 file changed +31
-3
lines changed Original file line number Diff line number Diff line change 1717#if USE_TRACKED_SHARED_PTR
1818 #define MAKE_TRACKED_SHARED (T, ...) makeTrackedShared<T>(__VA_ARGS__)
1919#else
20- #define MAKE_TRACKED_SHARED (T, ...) QSharedPointer<T>(new T(__VA_ARGS__), &QObject::deleteLater )
20+ #define MAKE_TRACKED_SHARED (T, ...) QSharedPointer<T>(new T(__VA_ARGS__), &DELETE_LATER_FN (T) )
2121#endif
2222
2323#if USE_TRACKED_DELETE_LATER
2424 #define DELETE_LATER_FN (T ) trackedDeleteLater<T>
2525#else
26- #define DELETE_LATER_FN (T ) &QObject::deleteLater
26+ #define DELETE_LATER_FN (T ) untrackedDeleteLater<T>
27+
2728#endif
2829
29- // Deleter function template
30+ // Deleter function templates
31+
32+ template <typename T>
33+ void untrackedDeleteLater (T* ptr)
34+ {
35+ if (!ptr)
36+ return ;
37+
38+ if constexpr (std::is_base_of<QObject, T>::value)
39+ {
40+ QThread* thread = ptr->thread ();
41+ if (thread && thread->isRunning ())
42+ {
43+ ptr->deleteLater ();
44+ }
45+ else
46+ {
47+ delete ptr;
48+ }
49+ }
50+ else
51+ {
52+ delete ptr;
53+ }
54+ }
55+
3056template <typename T>
3157void trackedDeleteLater (T* ptr)
3258{
@@ -80,6 +106,8 @@ template<typename T, typename... Args>
80106QSharedPointer<T> makeTrackedShared (Args&&... args)
81107{
82108 T* rawPtr = new T (std::forward<Args>(args)...);
109+ if (!rawPtr)
110+ return QSharedPointer<T>();
83111
84112 QString subComponent = " __" ;
85113 QString typeName;
You can’t perform that action at this time.
0 commit comments