aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorColin Snover2017-10-05 20:33:45 -0500
committerColin Snover2017-10-06 22:10:49 -0500
commit79dd02373cb431adfceeb4be50366b7c084490d9 (patch)
treefa3491808b2af11b72a659360edf7836f0d1f835 /common
parent5e2e6e9e8a06a3a54e74b889d167a094d74f5d5a (diff)
downloadscummvm-rg350-79dd02373cb431adfceeb4be50366b7c084490d9.tar.gz
scummvm-rg350-79dd02373cb431adfceeb4be50366b7c084490d9.tar.bz2
scummvm-rg350-79dd02373cb431adfceeb4be50366b7c084490d9.zip
COMMON: Prevent implicit conversion of smart pointers to non-bools
Diffstat (limited to 'common')
-rw-r--r--common/ptr.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/common/ptr.h b/common/ptr.h
index ebdd77cf3c..510fec14df 100644
--- a/common/ptr.h
+++ b/common/ptr.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "common/noncopyable.h"
+#include "common/safe-bool.h"
#include "common/types.h"
namespace Common {
@@ -103,7 +104,7 @@ private:
* a plain pointer is only possible via SharedPtr::get.
*/
template<class T>
-class SharedPtr {
+class SharedPtr : public SafeBool<SharedPtr<T> > {
#if !defined(__GNUC__) || GCC_ATLEAST(3, 0)
template<class T2> friend class SharedPtr;
#endif
@@ -167,7 +168,7 @@ public:
* Implicit conversion operator to bool for convenience, to make
* checks like "if (sharedPtr) ..." possible.
*/
- operator bool() const { return _pointer != 0; }
+ bool operator_bool() const { return _pointer != nullptr; }
/**
* Checks if the SharedPtr object is the only object refering
@@ -223,7 +224,7 @@ private:
};
template<typename T>
-class ScopedPtr : NonCopyable {
+class ScopedPtr : private NonCopyable, public SafeBool<ScopedPtr<T> > {
public:
typedef T ValueType;
typedef T *PointerType;
@@ -238,7 +239,7 @@ public:
* Implicit conversion operator to bool for convenience, to make
* checks like "if (scopedPtr) ..." possible.
*/
- operator bool() const { return _pointer != 0; }
+ bool operator_bool() const { return _pointer != nullptr; }
~ScopedPtr() {
delete _pointer;
@@ -277,7 +278,7 @@ private:
template<typename T>
-class DisposablePtr : NonCopyable {
+class DisposablePtr : private NonCopyable, public SafeBool<DisposablePtr<T> > {
public:
typedef T ValueType;
typedef T *PointerType;
@@ -296,7 +297,7 @@ public:
* Implicit conversion operator to bool for convenience, to make
* checks like "if (scopedPtr) ..." possible.
*/
- operator bool() const { return _pointer; }
+ bool operator_bool() const { return _pointer != nullptr; }
/**
* Returns the plain pointer value.