diff options
-rw-r--r-- | common/ptr.h | 6 | ||||
-rw-r--r-- | test/common/ptr.h | 16 |
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); + } }; |