X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6021b8f80b7b64b5d50702864da5f139710527e4..ad667945478cda0c0a33e154f1d4403402cffb9e:/include/wx/object.h diff --git a/include/wx/object.h b/include/wx/object.h index 58e62f03be..f9d9f2be9b 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -17,7 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#include "wx/defs.h" #include "wx/memory.h" class WXDLLIMPEXP_BASE wxObject; @@ -65,7 +64,9 @@ public: ~wxClassInfo(); - wxObject *CreateObject() { return m_objectConstructor ? (*m_objectConstructor)() : 0; } + wxObject *CreateObject() const + { return m_objectConstructor ? (*m_objectConstructor)() : 0; } + bool IsDynamic() const { return (NULL != m_objectConstructor); } const wxChar *GetClassName() const { return m_className; } const wxChar *GetBaseClassName1() const @@ -76,7 +77,8 @@ public: const wxClassInfo *GetBaseClass2() const { return m_baseInfo2; } int GetSize() const { return m_objectSize; } - wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; } + wxObjectConstructorFn GetConstructor() const + { return m_objectConstructor; } static const wxClassInfo *GetFirst() { return sm_first; } const wxClassInfo *GetNext() const { return m_next; } static wxClassInfo *FindClass(const wxChar *className); @@ -98,7 +100,6 @@ public: // Cleans up hash table used for fast searching. wxDEPRECATED( static void CleanUpClasses() ); #endif - static void CleanUp(); public: const wxChar *m_className; @@ -353,8 +354,9 @@ inline void* wxCheckCast(void *ptr) #define _WX_WANT_DELETE_VOID_CONSTCHAR_SIZET #endif -// Only VC++ 6.0 and CodeWarrior compilers get overloaded delete that matches new -#if ( defined(__VISUALC__) && (__VISUALC__ >= 1200) ) || (defined(__MWERKS__) && (__MWERKS__ >= 0x2400)) +// Only VC++ 6 and CodeWarrior get overloaded delete that matches new +#if (defined(__VISUALC__) && (__VISUALC__ >= 1200)) || \ + (defined(__MWERKS__) && (__MWERKS__ >= 0x2400)) #define _WX_WANT_DELETE_VOID_WXCHAR_INT #endif @@ -471,14 +473,20 @@ public: // destroy a reference void UnRef(); + // Make sure this object has only one reference + void UnShare() { AllocExclusive(); } + + // check if this object references the same data as the other one + bool IsSameAs(const wxObject& o) const { return m_refData == o.m_refData; } + protected: // ensure that our data is not shared with anybody else: if we have no // data, it is created using CreateRefData() below, if we have shared data // it is copied using CloneRefData(), otherwise nothing is done void AllocExclusive(); - // both methods must be implemented if Unshare() is used, not pure virtual - // only because of the backwards compatibility reasons + // both methods must be implemented if AllocExclusive() is used, not pure + // virtual only because of the backwards compatibility reasons // create a new m_refData virtual wxObjectRefData *CreateRefData() const; @@ -501,7 +509,7 @@ class WXDLLIMPEXP_BASE wxDynamicObject : public wxObject public: // instantiates this object with an instance of its superclass wxDynamicObject(wxObject* superClassInstance, const wxDynamicClassInfo *info) ; - ~wxDynamicObject(); + virtual ~wxDynamicObject(); void SetProperty (const wxChar *propertyName, const wxxVariant &value); wxxVariant GetProperty (const wxChar *propertyName) const ; @@ -538,23 +546,24 @@ private : // more debugging macros // ---------------------------------------------------------------------------- -#ifdef __WXDEBUG__ - #ifndef WXDEBUG_NEW - #define WXDEBUG_NEW new(__TFILE__,__LINE__) - #endif -#else // !__WXDEBUG__ - #define WXDEBUG_NEW new -#endif - // Redefine new to be the debugging version. This doesn't work with all // compilers, in which case you need to use WXDEBUG_NEW explicitly if you wish // to use the debugging version. -#if defined(__WXDEBUG__) && wxUSE_GLOBAL_MEMORY_OPERATORS && wxUSE_DEBUG_NEW_ALWAYS - #define new new(__TFILE__,__LINE__) -#elif (defined(__WXDEBUG__) && defined(__VISUALC__) && !wxUSE_GLOBAL_MEMORY_OPERATORS && wxUSE_DEBUG_NEW_ALWAYS) - // Including this file redefines new and allows leak reports to contain line numbers - #include "wx/msw/msvcrt.h" -#endif +#ifdef __WXDEBUG__ + #define WXDEBUG_NEW new(__TFILE__,__LINE__) + + #if wxUSE_DEBUG_NEW_ALWAYS + #if wxUSE_GLOBAL_MEMORY_OPERATORS + #define new WXDEBUG_NEW + #elif defined(__VISUALC__) + // Including this file redefines new and allows leak reports to + // contain line numbers + #include "wx/msw/msvcrt.h" + #endif + #endif // wxUSE_DEBUG_NEW_ALWAYS +#else // !__WXDEBUG__ + #define WXDEBUG_NEW new +#endif // __WXDEBUG__/!__WXDEBUG__ #endif // _WX_OBJECTH__