#ifndef _WX_OBJECTH__
#define _WX_OBJECTH__
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "object.h"
#endif
class WXDLLEXPORT wxHashTable;
class WXDLLEXPORT wxObjectRefData;
-#if wxUSE_STD_IOSTREAM && (defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT)
- #include "wx/ioswrap.h"
-#endif
-
-
// ----------------------------------------------------------------------------
// wxClassInfo
// ----------------------------------------------------------------------------
, m_baseInfo1(0)
, m_baseInfo2(0)
, m_next(sm_first)
- {
-#ifdef __WXDEBUG__
- if (sm_classTable != NULL) {
- wxString msg(_T("too late binding of class info (lazy binding) for "));
- msg += className;
- wxFAIL_MSG(msg);
- }
-#endif
- sm_first = this;
- }
+ { sm_first = this; }
+
+ ~wxClassInfo();
wxObject *CreateObject() { return m_objectConstructor ? (*m_objectConstructor)() : 0; }
// to be replaced by dynamic_cast<> in the future
#define wxDynamicCast(obj, className) \
- (className *) wxCheckDynamicCast((wxObject*)(obj), &className::sm_class##className)
+ ((className *) wxCheckDynamicCast((wxObject*)(obj), &className::sm_class##className))
// The 'this' pointer is always true, so use this version
// to cast the this pointer and avoid compiler warnings.
#endif // __WXDEBUG__
-
-// for some reason Borland seems to need this include.
-#if wxUSE_STD_IOSTREAM \
- && (defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT) \
- && defined(__BORLANDC__)
- #if wxUSE_IOSTREAMH
- #include <iostream.h>
- #else
- #include <iostream>
- #endif
-#endif // wxUSE_IOSTREAMH
-
// ----------------------------------------------------------------------------
// set up memory debugging macros
// ----------------------------------------------------------------------------
#endif // WXDEBUG && wxUSE_MEMORY_TRACING
+#if wxUSE_STD_IOSTREAM && (defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT)
+// needed by wxObject::Dump
+#include "wx/iosfwrap.h"
+#endif
// ----------------------------------------------------------------------------
// wxObject: the root class of wxWindows object hierarchy
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;
class WXDLLEXPORT wxObjectRefData
{
- friend class wxObject;
+ friend class WXDLLEXPORT wxObject;
public:
wxObjectRefData() : m_count(1) { }