From a6391d30221084cbd7146f8076141b697891b9d4 Mon Sep 17 00:00:00 2001 From: Gilles Depeyrot Date: Thu, 9 May 2002 12:18:54 +0000 Subject: [PATCH] implement explicit copying instead of forbidding it git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15461 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/object.h | 19 ++++++++++++++++++- src/common/object.cpp | 12 ++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/include/wx/object.h b/include/wx/object.h index 2892637645..6f5c68ce87 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -411,12 +411,29 @@ inline void wxCheckCast(void *ptr) class WXDLLEXPORT wxObject { DECLARE_ABSTRACT_CLASS(wxObject) - DECLARE_NO_COPY_CLASS(wxObject) +private: + void InitFrom(const wxObject& other); + public: wxObject() { m_refData = NULL; } virtual ~wxObject() { UnRef(); } + wxObject(const wxObject& other) + { + InitFrom(other); + } + + wxObject& operator=(const wxObject& other) + { + if ( this != &other ) + { + UnRef(); + InitFrom(other); + } + return *this; + } + bool IsKindOf(wxClassInfo *info) const; diff --git a/src/common/object.cpp b/src/common/object.cpp index b3b09abf92..7148e579b3 100644 --- a/src/common/object.cpp +++ b/src/common/object.cpp @@ -82,7 +82,6 @@ void wxObject::Dump(wxSTD ostream& str) #endif - #ifdef _WX_WANT_NEW_SIZET_WXCHAR_INT void *wxObject::operator new ( size_t size, const wxChar *fileName, int lineNum ) { @@ -247,9 +246,18 @@ wxObject *wxCreateDynamicObject(const wxChar *name) // ---------------------------------------------------------------------------- -// wxClassInfo +// wxObject // ---------------------------------------------------------------------------- +// Initialize ref data from another object (needed for copy constructor and +// assignment operator) +void wxObject::InitFrom(const wxObject& other) +{ + m_refData = other.m_refData; + if ( m_refData ) + m_refData->m_count++; +} + void wxObject::Ref(const wxObject& clone) { #if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT -- 2.45.2