implement explicit copying instead of forbidding it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15461 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Gilles Depeyrot
2002-05-09 12:18:54 +00:00
parent b669b781c2
commit a6391d3022
2 changed files with 28 additions and 3 deletions

View File

@@ -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;

View File

@@ -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