summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2020-06-26 09:50:09 -0700
committerThiago Macieira <thiago.macieira@intel.com>2020-07-31 10:40:25 -0700
commit95afe6b244dbd9623a92399d1bed0b9f52aa1e65 (patch)
tree8f7a79bd0b82d9d9b283c8aec1beb4d21bbea667 /tests/auto/corelib
parentfe9e6b2ceb77befb77e664cda9842ff95ddf08a3 (diff)
QSharedPointer: do allow calling deleters on null pointers
I don't know why std::shared_ptr allows this, but why not. [ChangeLog][Important Behavior Changes] QSharedPointer objects will now call custom deleters even when the pointer being tracked was null. This behavior is the same as std::shared_ptr. Fixes: QTBUG-85285 Pick-to: 5.15 Change-Id: I24006db8360041f598c5fffd161c260df0313b55 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
index ccbae61c06..8e92ed44f4 100644
--- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
@@ -1,7 +1,8 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2020 Intel Corporation.
+** Copyright (C) 2019 Klarälvdalens Datakonsult AB.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -95,6 +96,7 @@ private slots:
void constCorrectness();
void customDeleter();
void lambdaCustomDeleter();
+ void customDeleterOnNullptr();
void creating();
void creatingCvQualified();
void creatingVariadic();
@@ -1846,6 +1848,33 @@ void tst_QSharedPointer::lambdaCustomDeleter()
safetyCheck();
}
+void tst_QSharedPointer::customDeleterOnNullptr()
+{
+ Data *null = nullptr;
+ int callCount = 0;
+ auto deleter = [&callCount](Data *) { ++callCount; };
+ {
+ QSharedPointer<Data> ptr(null, deleter);
+ }
+ safetyCheck();
+ QCOMPARE(callCount, 1);
+
+ callCount = 0;
+ {
+ QSharedPointer<Data> ptr(nullptr, deleter);
+ }
+ safetyCheck();
+ QCOMPARE(callCount, 1);
+
+ callCount = 0;
+ {
+ QSharedPointer<Data> ptr1(null, deleter);
+ QSharedPointer<Data> ptr2(nullptr, deleter);
+ }
+ safetyCheck();
+ QCOMPARE(callCount, 2);
+}
+
void customQObjectDeleterFn(QObject *obj)
{
++customDeleterFnCallCount;