aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/ptr.h6
-rw-r--r--test/common/ptr.h16
2 files changed, 21 insertions, 1 deletions
diff --git a/common/ptr.h b/common/ptr.h
index cad23a18ff..1121ffd665 100644
--- a/common/ptr.h
+++ b/common/ptr.h
@@ -62,7 +62,7 @@ namespace Common {
* The class has implicit upcast support, so if you got a class B derived
* from class A, you can assign a pointer to B without any problems to a
* SharedPtr object with template parameter A. The very same applies to
- * assigment of a SharedPtr<B> object to a SharedPtr<A> object.
+ * assignment of a SharedPtr<B> object to a SharedPtr<A> object.
*
* There are also operators != and == to compare two SharedPtr objects
* with compatible pointers.
@@ -116,6 +116,10 @@ public:
*/
Pointer get() const { return _pointer; }
+ /**
+ * Implicit conversion operator to bool for convenience, to make
+ * checks like "if (sharePtr) ..." possible.
+ */
operator bool() const { return _pointer != 0; }
/**
diff --git a/test/common/ptr.h b/test/common/ptr.h
index b6f2e950ca..7102a819cf 100644
--- a/test/common/ptr.h
+++ b/test/common/ptr.h
@@ -33,4 +33,20 @@ class PtrTestSuite : public CxxTest::TestSuite
TS_ASSERT_EQUALS(*p1, 0);
TS_ASSERT(p1.unique());
}
+
+ void test_compare() {
+ Common::SharedPtr<int> p1(new int(1));
+ Common::SharedPtr<int> p2;
+
+ TS_ASSERT(p1);
+ TS_ASSERT(!p2);
+
+ TS_ASSERT(p1 != 0);
+ TS_ASSERT(p2 == 0);
+
+ // Note: The following two currently do *not* work, contrary to
+ // what the Doxygen comments of SharedPtr claim.
+ TS_ASSERT(p1 != (int *)0);
+ TS_ASSERT(p2 == (int *)0);
+ }
};