From 8026dc6f361b31e36344a3147aac308620287518 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 13 Apr 2016 18:02:25 -0700 Subject: Add support for initializing QSharedPointer from nullptr std::shared_ptr supports it. To resolve an ambiguous overload when a literal 0 is passed as a parameter, the normal constructors needed to be made a template, like std::shared_ptr. Task-number: QTBUG-52569 Change-Id: Id75834dab9ed466e94c7ffff14451417892d2148 Reviewed-by: Marc Mutz --- .../tools/qsharedpointer/tst_qsharedpointer.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp') diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp index cefe1e526d..f48e81ed91 100644 --- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp +++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp @@ -57,6 +57,7 @@ private slots: void basics_data(); void basics(); void operators(); + void nullptrOps(); void swap(); void moveSemantics(); void useOfForwardDeclared(); @@ -362,6 +363,30 @@ void tst_QSharedPointer::operators() QCOMPARE(qHash(p2), qHash(p2.data())); } +void tst_QSharedPointer::nullptrOps() +{ + QSharedPointer p1(nullptr); + QSharedPointer p2 = nullptr; + QSharedPointer null; + + QVERIFY(p1 == null); + QVERIFY(p2 == null); + QVERIFY(!p1.data()); + QVERIFY(!p2.data()); + + QSharedPointer p3 = p1; + QVERIFY(p3 == null); + QVERIFY(!p3.data()); + + p3 = nullptr; + + // check for non-ambiguity + QSharedPointer p1_zero(0); + QSharedPointer p2_zero = 0; + + p3 = 0; +} + void tst_QSharedPointer::swap() { QSharedPointer p1, p2(new int(42)), control = p2; @@ -1309,6 +1334,18 @@ template int CustomDeleter::callCount = 0; void tst_QSharedPointer::customDeleter() { + { + QSharedPointer ptr(0, &Data::doDelete); + QSharedPointer ptr2(0, &Data::alsoDelete); + QSharedPointer ptr3(0, &Data::virtualDelete); + } + safetyCheck(); + { + QSharedPointer ptr(nullptr, &Data::doDelete); + QSharedPointer ptr2(nullptr, &Data::alsoDelete); + QSharedPointer ptr3(nullptr, &Data::virtualDelete); + } + safetyCheck(); { QSharedPointer ptr(new Data, &Data::doDelete); QSharedPointer ptr2(new Data, &Data::alsoDelete); -- cgit v1.2.3