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 class WXDLLEXPORT wxObject
{ {
DECLARE_ABSTRACT_CLASS(wxObject) DECLARE_ABSTRACT_CLASS(wxObject)
DECLARE_NO_COPY_CLASS(wxObject)
private:
void InitFrom(const wxObject& other);
public: public:
wxObject() { m_refData = NULL; } wxObject() { m_refData = NULL; }
virtual ~wxObject() { UnRef(); } 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; bool IsKindOf(wxClassInfo *info) const;

View File

@@ -82,7 +82,6 @@ void wxObject::Dump(wxSTD ostream& str)
#endif #endif
#ifdef _WX_WANT_NEW_SIZET_WXCHAR_INT #ifdef _WX_WANT_NEW_SIZET_WXCHAR_INT
void *wxObject::operator new ( size_t size, const wxChar *fileName, int lineNum ) 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) void wxObject::Ref(const wxObject& clone)
{ {
#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT #if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT