diff --git a/toonz/sources/include/tsmartpointer.h b/toonz/sources/include/tsmartpointer.h index 403545b..6332b00 100644 --- a/toonz/sources/include/tsmartpointer.h +++ b/toonz/sources/include/tsmartpointer.h @@ -109,7 +109,6 @@ protected: T *m_pointer; T& reference() const { assert(m_pointer); return *m_pointer; } -public: TSmartPointerBaseT() : m_pointer(0) {} TSmartPointerBaseT(const TSmartPointerBaseT &src) : m_pointer(src.m_pointer) { if (m_pointer) m_pointer->addRef(); } @@ -117,9 +116,10 @@ public: { if (m_pointer) m_pointer->addRef(); } virtual ~TSmartPointerBaseT() { if (m_pointer) { m_pointer->release(); m_pointer = 0; } } - TSmartPointerBaseT& operator=(const TSmartPointerBaseT &src) - { set(src); return *this; } +public: + const T* getConstPointer() const + { return m_pointer; } void set(T *pointer) { if (m_pointer != pointer) { // call 'addRef' before 'release' @@ -137,14 +137,18 @@ public: operator bool() const { return m_pointer != 0; } - bool operator==(const TSmartPointerBaseT &p) const - { return m_pointer == p.m_pointer; } - bool operator!=(const TSmartPointerBaseT &p) const - { return m_pointer != p.m_pointer; } - bool operator<(const TSmartPointerBaseT &p) const - { return m_pointer < p.m_pointer; } - bool operator>(const TSmartPointerBaseT &p) const - { return m_pointer > p.m_pointer; } + template + bool operator==(const TSmartPointerBaseT &p) const + { return m_pointer == p.getConstPointer(); } + template + bool operator!=(const TSmartPointerBaseT &p) const + { return m_pointer != p.getConstPointer(); } + template + bool operator<(const TSmartPointerBaseT &p) const + { return m_pointer < p.getConstPointer(); } + template + bool operator>(const TSmartPointerBaseT &p) const + { return m_pointer > p.getConstPointer(); } bool operator==(const T *p) const { return m_pointer == p; } @@ -198,15 +202,11 @@ class TDerivedSmartPointerT : public TSmartPointerT { public: typedef TDerivedSmartPointerT DerivedSmartPointer; - TDerivedSmartPointerT(){}; - TDerivedSmartPointerT(DERIVED *pointer) : TSmartPointerT(pointer) {} - - TDerivedSmartPointerT(const TSmartPointerT &p) { - TSmartPointerT::m_pointer = - dynamic_cast(p.getPointer()); - if (TSmartPointerT::m_pointer) - TSmartPointerT::m_pointer->addRef(); - } + TDerivedSmartPointerT() { }; + TDerivedSmartPointerT(DERIVED *pointer): + TSmartPointerT(pointer) { } + TDerivedSmartPointerT(const TSmartPointerT &p): + TSmartPointerT(dynamic_cast(p.getPointer())) { } }; //=========================================================