From: Vadim Zeitlin Date: Wed, 16 Jan 2008 02:04:00 +0000 (+0000) Subject: define (unusual) copy ctor and assignment operator for wxTrackable (part of patch... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/dd10e6143ba50e5d5604100d063cf157dcdcb1ce define (unusual) copy ctor and assignment operator for wxTrackable (part of patch 1870445); also make its ctors and dtor protected as this class shouldn't used otherwise as a base class git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51232 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/tracker.h b/include/wx/tracker.h index 0ffbc1df99..272222907a 100644 --- a/include/wx/tracker.h +++ b/include/wx/tracker.h @@ -38,19 +38,6 @@ private: class wxTrackable { public: - wxTrackable() : m_first(NULL) { } - - ~wxTrackable() - { - // Notify all registered refs - while ( m_first ) - { - wxTrackerNode * const first = m_first; - m_first = first->m_nxt; - first->OnObjectDestroy(); - } - } - void AddNode(wxTrackerNode *prn) { prn->m_nxt = m_first; @@ -74,9 +61,31 @@ public: wxTrackerNode *GetFirst() const { return m_first; } protected: - wxTrackerNode *m_first; + // this class is only supposed to be used as a base class but never be + // created nor destroyed directly so all ctors and dtor are protected - DECLARE_NO_COPY_CLASS(wxTrackable) + wxTrackable() : m_first(NULL) { } + + // copy ctor and assignment operator intentionally do not copy m_first: the + // objects which track the original trackable shouldn't track the new copy + wxTrackable(const wxTrackable& WXUNUSED(other)) : m_first(NULL) { } + wxTrackable& operator=(const wxTrackable& WXUNUSED(other)) { return *this; } + + // dtor is not virtual: this class is not supposed to be used + // polymorphically and adding a virtual table to it would add unwanted + // overhead + ~wxTrackable() + { + // Notify all registered refs + while ( m_first ) + { + wxTrackerNode * const first = m_first; + m_first = first->m_nxt; + first->OnObjectDestroy(); + } + } + + wxTrackerNode *m_first; }; #endif // _WX_TRACKER_H_