summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp')
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
index 506bab6a23..7c3f0e5415 100644
--- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
@@ -89,6 +89,7 @@ private slots:
#endif
void constCorrectness();
void customDeleter();
+ void lambdaCustomDeleter();
void creating();
void creatingQObject();
void mixTrackingPointerCode();
@@ -1336,6 +1337,37 @@ void tst_QSharedPointer::customDeleter()
safetyCheck();
}
+void tst_QSharedPointer::lambdaCustomDeleter()
+{
+#ifndef Q_COMPILER_LAMBDA
+ QSKIP("This compiler is not in C++11 mode or does not support lambdas");
+#else
+ {
+ // stateless, one-argument
+ QSharedPointer<Data> ptr(new Data, [](Data *d) { delete d; });
+ QSharedPointer<Data> ptr2(new Data, [](Data *d) { d->doDelete(); });
+ }
+ safetyCheck();
+
+ customDeleterFnCallCount = 0;
+ {
+ // stateless, one-argument, modifies globals
+ QSharedPointer<Data> ptr(new Data, [](Data *d) { ++customDeleterFnCallCount; delete d; });
+ }
+ safetyCheck();
+ QCOMPARE(customDeleterFnCallCount, 1);
+
+ {
+ // stateful by ref, one-argument
+ int i = 0;
+ QSharedPointer<Data> ptr(new Data, [&i](Data *d) { i = 42; delete d; });
+ ptr.clear();
+ QCOMPARE(i, 42);
+ }
+ safetyCheck();
+#endif
+}
+
void customQObjectDeleterFn(QObject *obj)
{
++customDeleterFnCallCount;