]>
git.saurik.com Git - wxWidgets.git/blob - interface/object.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: documentation for wxObjectRefData class
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
10 @class wxObjectRefData
13 This class is used to store reference-counted data. Derive classes from this to
14 store your own data. When retrieving information from a @b wxObject's reference
16 you will need to cast to your own derived class.
22 wxObject, wxObjectDataPtrT, @ref overview_trefcount "Reference counting"
28 Default constructor. Initialises the internal reference count to 1.
33 Destructor. It's declared @c protected so that wxObjectRefData instances will
35 be destroyed directly but only as result of a DecRef() call.
40 Decrements the reference count associated with this shared data and, if it
42 destroys this instance of wxObjectRefData releasing its memory.
44 Please note that after calling this function, the caller should absolutely
46 the pointer to this instance since it may not be valid anymore.
51 Returns the reference count associated with this shared data.
52 When this goes to zero during a DecRef() call, the object
53 will auto-free itself.
58 Increments the reference count associated with this shared data.
68 This is the root class of many of the wxWidgets classes.
69 It declares a virtual destructor which ensures that
70 destructors get called for all derived class objects where necessary.
72 wxObject is the hub of a dynamic object creation
73 scheme, enabling a program to create instances of a class only knowing
74 its string class name, and to query the class hierarchy.
76 The class contains optional debugging versions
77 of @b new and @b delete, which can help trace memory allocation
78 and deallocation problems.
80 wxObject can be used to implement @ref overview_trefcount "reference counted"
82 such as wxPen, wxBitmap and others (see @ref overview_refcountlist "this list").
88 wxClassInfo, @ref overview_debuggingoverview "Debugging overview",
96 Default and copy constructors.
99 wxObject(const wxObject
& other
);
103 Destructor. Performs dereferencing, for those objects
104 that use reference counting.
109 A virtual function that may be redefined by derived classes to allow dumping of
112 This function is only defined in debug build and doesn't exist at all if
113 @c __WXDEBUG__ is not defined.
116 Stream on which to output dump information.
118 @remarks Currently wxWidgets does not define Dump for derived classes,
119 but programmers may wish to use it for their own
120 applications. Be sure to call the Dump member of the
121 class's base class to allow all information to be
124 void Dump(ostream
& stream
);
127 This virtual function is redefined for every class that requires run-time
128 type information, when using DECLARE_CLASS macros.
130 wxClassInfo
* GetClassInfo();
133 Returns the @b m_refData pointer.
135 @sa Ref(), UnRef(), wxObject::m_refData, SetRefData(),
138 wxObjectRefData
* GetRefData();
141 Determines whether this class is a subclass of (or the same class as)
145 A pointer to a class information object, which may be obtained
146 by using the CLASSINFO macro.
148 @returns @true if the class represented by info is the same class as this
149 one or is derived from it.
151 bool IsKindOf(wxClassInfo
* info
);
154 Returns @true if this object has the same data pointer as @e obj. Notice
155 that @true is returned if the data pointers are @NULL in both objects.
157 This function only does a shallow comparison, i.e. it doesn't compare
158 the objects pointed to by the data pointers of these objects.
160 bool IsSameAs(const wxObject
& obj
);
163 Makes this object refer to the data in @e clone.
166 The object to 'clone'.
168 @remarks First this function calls UnRef() on itself to decrement
169 (and perhaps free) the data it is currently referring
172 @sa UnRef(), wxObject::m_refData, SetRefData(),
173 GetRefData(), wxObjectRefData
175 #define void Ref(const wxObject& clone) /* implementation is private */
178 Sets the @b m_refData pointer.
180 @sa Ref(), UnRef(), wxObject::m_refData, GetRefData(),
183 void SetRefData(wxObjectRefData
* data
);
186 Decrements the reference count in the associated data, and if it is zero,
188 The @b m_refData member is set to @NULL.
190 @sa Ref(), wxObject::m_refData, SetRefData(),
191 GetRefData(), wxObjectRefData
196 Ensure that this object's data is not shared with any other object.
199 data, it is created using CreateRefData() below, if we have shared data
200 it is copied using CloneRefData(), otherwise nothing is done.
205 wxObjectRefData* m_refData
207 Pointer to an object which is the object's reference-counted data.
209 @sa Ref(), UnRef(), SetRefData(),
210 GetRefData(), wxObjectRefData
215 The @e delete operator is defined for debugging versions of the library only,
217 the identifier __WXDEBUG__ is defined. It takes over memory deallocation,
219 wxDebugContext operations.
221 void delete(void buf
);
224 The @e new operator is defined for debugging versions of the library only, when
225 the identifier __WXDEBUG__ is defined. It takes over memory allocation, allowing
226 wxDebugContext operations.
228 void * new(size_t size
, const wxString
& filename
= @NULL
,
237 This class stores meta-information about classes. Instances of this class are
238 not generally defined directly by an application, but indirectly through use
239 of macros such as @b DECLARE_DYNAMIC_CLASS and @b IMPLEMENT_DYNAMIC_CLASS.
251 Constructs a wxClassInfo object. The supplied macros implicitly construct
253 class, so there is no need to create such objects explicitly in an application.
255 wxClassInfo(const wxChar
* className
,
256 const wxClassInfo
* baseClass1
,
257 const wxClassInfo
* baseClass2
,
258 int size
, wxObjectConstructorFn fn
);
261 Creates an object of the appropriate kind. Returns @NULL if the class has not
263 dynamically creatable (typically, it is an abstract class).
265 wxObject
* CreateObject();
268 Finds the wxClassInfo object for a class of the given string name.
270 static wxClassInfo
* FindClass(wxChar
* name
);
273 Returns the name of the first base class (@NULL if none).
275 wxChar
* GetBaseClassName1();
278 Returns the name of the second base class (@NULL if none).
280 wxChar
* GetBaseClassName2();
283 Returns the string form of the class name.
285 wxChar
* GetClassName();
288 Returns the size of the class.
293 Initializes pointers in the wxClassInfo objects for fast execution
294 of IsKindOf. Called in base wxWidgets library initialization.
296 static void InitializeClasses();
299 Returns @true if this class info can create objects of the associated class.
304 Returns @true if this class is a kind of (inherits from) the given class.
306 bool IsKindOf(wxClassInfo
* info
);
311 @class wxObjectDataPtrT
314 This is helper template class primarily written to avoid memory
315 leaks because of missing calls to wxObjectRefData::DecRef.
317 Despite the name this template can actually be used as a
318 smart pointer for any class implementing the reference
319 counting interface which only consists of the two methods
320 @b T::IncRef() and @b T::DecRef().
322 The difference to wxSharedPtr is that
323 wxObjectDataPtr relies on the reference counting to be in
324 the class pointed to where as wxSharedPtr implements the
325 reference counting itself.
331 wxObject, wxObjectRefData, @ref overview_trefcount "Reference counting"
333 class wxObjectDataPtr
<T
>
338 This copy constructor increases the count of the reference
339 counted object to which @e tocopy points and then this
340 class will point to, as well.
342 wxObjectDataPtrT(T
* ptr
= @NULL
);
343 wxObjectDataPtrT(const wxObjectDataPtr
<T
>& tocopy
);
347 Decreases the reference count of the object to which this
353 Gets a pointer to the reference counted object to which
359 Conversion to a boolean expression (in a variant which is not
360 convertable to anything but a boolean expression). If this class
361 contains a valid pointer it will return @e @true, if it contains
362 a @NULL pointer it will return @e @false.
364 operator unspecified_bool_type();
367 Returns a reference to the object. If the internal pointer is @NULL
368 this method will cause an assert in debug mode.
373 Returns a pointer to the reference counted object to which
374 this class points. If this the internal pointer is @NULL,
375 this method will assert in debug mode.
381 Assignment operators.
383 wxObjectDataPtrT
& operator operator=(const wxObjectDataPtr
<T
>& tocopy
);
384 wxObjectDataPtrT
& operator operator=(T
* ptr
);
389 // ============================================================================
390 // Global functions/macros
391 // ============================================================================
394 Used inside a class declaration to declare that the class should be
395 made known to the class hierarchy, but objects of this class cannot be created
396 dynamically. The same as DECLARE_ABSTRACT_CLASS.
398 #define DECLARE_CLASS() /* implementation is private */
401 Used inside a class declaration to declare that the class should be
402 made known to the class hierarchy, but objects of this class cannot be created
403 dynamically. The same as DECLARE_CLASS.
407 class wxCommand: public wxObject
409 DECLARE_ABSTRACT_CLASS(wxCommand)
418 #define DECLARE_ABSTRACT_CLASS() /* implementation is private */
421 Returns a pointer to the wxClassInfo object associated with this class.
423 #define wxClassInfo * CLASSINFO() /* implementation is private */
426 Same as @c reinterpret_castT(x) if the compiler supports reinterpret cast or
427 @c (T)x for old compilers.
429 @sa wx_const_cast, wx_static_cast
431 T
wx_reinterpret_cast();
434 Used in a C++ implementation file to complete the declaration of a
435 class that has run-time type information and two base classes. The
436 same as IMPLEMENT_ABSTRACT_CLASS2.
438 #define IMPLEMENT_CLASS2() /* implementation is private */
441 This macro expands into @c const_castclassname *(ptr) if the compiler
442 supports @e const_cast or into an old, C-style cast, otherwise.
444 @sa wx_const_cast, wxDynamicCast, wxStaticCast
446 classname
* wxConstCast();
449 Used in a C++ implementation file to complete the declaration of
450 a class that has run-time type information. The same as IMPLEMENT_CLASS.
454 IMPLEMENT_ABSTRACT_CLASS(wxCommand, wxObject)
456 wxCommand::wxCommand(void)
462 #define IMPLEMENT_ABSTRACT_CLASS() /* implementation is private */
465 Used in a C++ implementation file to complete the declaration of
466 a class that has run-time type information. The same as
467 IMPLEMENT_ABSTRACT_CLASS.
469 #define IMPLEMENT_CLASS() /* implementation is private */
472 This macro is equivalent to @c wxDynamicCast(this, classname) but the
473 latter provokes spurious compilation warnings from some compilers (because it
474 tests whether @c this pointer is non-@NULL which is always @true), so
475 this macro should be used to avoid them.
479 classname
* wxDynamicCastThis();
482 Used in a C++ implementation file to complete the declaration of
483 a class that has run-time type information, and whose instances
484 can be created dynamically. Use this for classes derived from two
487 #define IMPLEMENT_DYNAMIC_CLASS2() /* implementation is private */
490 Creates and returns an object of the given class, if the class has been
491 registered with the dynamic class system using DECLARE... and IMPLEMENT...
494 wxObject
* wxCreateDynamicObject(const wxString
& className
);
497 Used inside a class declaration to make the class known to wxWidgets RTTI
498 system and also declare that the objects of this class should be dynamically
499 creatable from run-time type information. Notice that this implies that the
500 class should have a default constructor, if this is not the case consider using
505 class wxFrame: public wxWindow
507 DECLARE_DYNAMIC_CLASS(wxFrame)
510 const wxString& frameTitle;
516 #define DECLARE_DYNAMIC_CLASS() /* implementation is private */
519 Same as @c const_castT(x) if the compiler supports const cast or
520 @c (T)x for old compilers. Unlike wxConstCast,
521 the cast it to the type @e T and not to @c T * and also the order of
522 arguments is the same as for the standard cast.
524 @sa wx_reinterpret_cast, wx_static_cast
529 Used in a C++ implementation file to complete the declaration of
530 a class that has run-time type information and two base classes. The same as
533 #define IMPLEMENT_ABSTRACT_CLASS2() /* implementation is private */
536 This macro returns the pointer @e ptr cast to the type @e classname * if
537 the pointer is of this type (the check is done during the run-time) or
538 @NULL otherwise. Usage of this macro is preferred over obsoleted
539 wxObject::IsKindOf() function.
541 The @e ptr argument may be @NULL, in which case @NULL will be
546 wxWindow *win = wxWindow::FindFocus();
547 wxTextCtrl *text = wxDynamicCast(win, wxTextCtrl);
550 // a text control has the focus...
554 // no window has the focus or it is not a text control
558 @sa @ref overview_runtimeclassoverview "RTTI overview", wxDynamicCastThis,
559 wxConstCast, wxStaticCast
561 classname
* wxDynamicCast();
564 This is defined in debug mode to be call the redefined new operator
565 with filename and line number arguments. The definition is:
567 #define WXDEBUG_NEW new(__FILE__,__LINE__)
570 In non-debug mode, this is defined as the normal new operator.
572 #define WXDEBUG_NEW() /* implementation is private */
575 This macro checks that the cast is valid in debug mode (an assert failure will
576 result if @c wxDynamicCast(ptr, classname) == @NULL) and then returns the
577 result of executing an equivalent of @c static_castclassname *(ptr).
579 @sa wx_static_cast, wxDynamicCast, wxConstCast
581 classname
* wxStaticCast();
584 Same as @c static_castT(x) if the compiler supports static cast or
585 @c (T)x for old compilers. Unlike wxStaticCast,
586 there are no checks being done and the meaning of the macro arguments is exactly
587 the same as for the standard static cast, i.e. @e T is the full type name and
588 star is not appended to it.
590 @sa wx_const_cast, wx_reinterpret_cast, wx_truncate_cast
595 Used in a C++ implementation file to complete the declaration of
596 a class that has run-time type information, and whose instances
597 can be created dynamically.
601 IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
603 wxFrame::wxFrame(void)
609 #define IMPLEMENT_DYNAMIC_CLASS() /* implementation is private */