]>
git.saurik.com Git - wxWidgets.git/blob - interface/object.h
32f85b35aa25c4baad58c58ed8c86557f5f735ff
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.
43 Please note that after calling this function, the caller should absolutely
45 the pointer to this instance since it may not be valid anymore.
50 Returns the reference count associated with this shared data.
51 When this goes to zero during a DecRef() call, the object
52 will auto-free itself.
57 Increments the reference count associated with this shared data.
67 This is the root class of many of the wxWidgets classes.
68 It declares a virtual destructor which ensures that
69 destructors get called for all derived class objects where necessary.
71 wxObject is the hub of a dynamic object creation
72 scheme, enabling a program to create instances of a class only knowing
73 its string class name, and to query the class hierarchy.
75 The class contains optional debugging versions
76 of @b new and @b delete, which can help trace memory allocation
77 and deallocation problems.
79 wxObject can be used to implement @ref overview_trefcount "reference counted"
81 such as wxPen, wxBitmap and others (see @ref overview_refcountlist "this list").
87 wxClassInfo, @ref overview_debuggingoverview, wxObjectRefData
94 Default and copy constructors.
97 wxObject(const wxObject
& other
);
101 Destructor. Performs dereferencing, for those objects
102 that use reference counting.
107 A virtual function that may be redefined by derived classes to allow dumping of
109 This function is only defined in debug build and doesn't exist at all if
110 @c __WXDEBUG__ is not defined.
113 Stream on which to output dump information.
115 @remarks Currently wxWidgets does not define Dump for derived classes,
116 but programmers may wish to use it for their own
117 applications. Be sure to call the Dump member of the
118 class's base class to allow all information to be
121 void Dump(ostream
& stream
);
124 This virtual function is redefined for every class that requires run-time
125 type information, when using DECLARE_CLASS macros.
127 wxClassInfo
* GetClassInfo();
130 Returns the @b m_refData pointer.
132 @see Ref(), UnRef(), wxObject::m_refData, SetRefData(),
135 wxObjectRefData
* GetRefData();
138 Determines whether this class is a subclass of (or the same class as)
142 A pointer to a class information object, which may be obtained
143 by using the CLASSINFO macro.
145 @returns @true if the class represented by info is the same class as this
146 one or is derived from it.
148 bool IsKindOf(wxClassInfo
* info
);
151 Returns @true if this object has the same data pointer as @e obj. Notice
152 that @true is returned if the data pointers are @NULL in both objects.
153 This function only does a shallow comparison, i.e. it doesn't compare
154 the objects pointed to by the data pointers of these objects.
156 bool IsSameAs(const wxObject
& obj
);
159 Makes this object refer to the data in @e clone.
162 The object to 'clone'.
164 @remarks First this function calls UnRef() on itself to decrement
165 (and perhaps free) the data it is currently referring
168 @see UnRef(), wxObject::m_refData, SetRefData(),
169 GetRefData(), wxObjectRefData
171 void Ref(const wxObject
& clone
);
174 Sets the @b m_refData pointer.
176 @see Ref(), UnRef(), wxObject::m_refData, GetRefData(),
179 void SetRefData(wxObjectRefData
* data
);
182 Decrements the reference count in the associated data, and if it is zero,
184 The @b m_refData member is set to @NULL.
186 @see Ref(), wxObject::m_refData, SetRefData(),
187 GetRefData(), wxObjectRefData
192 Ensure that this object's data is not shared with any other object.
194 data, it is created using CreateRefData() below, if we have shared data
195 it is copied using CloneRefData(), otherwise nothing is done.
200 wxObjectRefData* m_refData
201 Pointer to an object which is the object's reference-counted data.
203 @see Ref(), UnRef(), SetRefData(),
204 GetRefData(), wxObjectRefData
209 The @e delete operator is defined for debugging versions of the library only,
211 the identifier __WXDEBUG__ is defined. It takes over memory deallocation,
213 wxDebugContext operations.
215 void delete(void buf
);
218 The @e new operator is defined for debugging versions of the library only, when
219 the identifier __WXDEBUG__ is defined. It takes over memory allocation, allowing
220 wxDebugContext operations.
222 void* new(size_t size
, const wxString
& filename
= NULL
,
231 This class stores meta-information about classes. Instances of this class are
232 not generally defined directly by an application, but indirectly through use
233 of macros such as @b DECLARE_DYNAMIC_CLASS and @b IMPLEMENT_DYNAMIC_CLASS.
245 Constructs a wxClassInfo object. The supplied macros implicitly construct
247 class, so there is no need to create such objects explicitly in an application.
249 wxClassInfo(const wxChar
* className
,
250 const wxClassInfo
* baseClass1
,
251 const wxClassInfo
* baseClass2
,
252 int size
, wxObjectConstructorFn fn
);
255 Creates an object of the appropriate kind. Returns @NULL if the class has not
257 dynamically creatable (typically, it is an abstract class).
259 wxObject
* CreateObject();
262 Finds the wxClassInfo object for a class of the given string name.
264 static wxClassInfo
* FindClass(wxChar
* name
);
267 Returns the name of the first base class (@NULL if none).
269 wxChar
* GetBaseClassName1();
272 Returns the name of the second base class (@NULL if none).
274 wxChar
* GetBaseClassName2();
277 Returns the string form of the class name.
279 wxChar
* GetClassName();
282 Returns the size of the class.
287 Initializes pointers in the wxClassInfo objects for fast execution
288 of IsKindOf. Called in base wxWidgets library initialization.
290 static void InitializeClasses();
293 Returns @true if this class info can create objects of the associated class.
298 Returns @true if this class is a kind of (inherits from) the given class.
300 bool IsKindOf(wxClassInfo
* info
);
305 @class wxObjectDataPtrT
308 This is helper template class primarily written to avoid memory
309 leaks because of missing calls to wxObjectRefData::DecRef.
311 Despite the name this template can actually be used as a
312 smart pointer for any class implementing the reference
313 counting interface which only consists of the two methods
314 @b T::IncRef() and @b T::DecRef().
316 The difference to wxSharedPtr is that
317 wxObjectDataPtr relies on the reference counting to be in
318 the class pointed to where as wxSharedPtr implements the
319 reference counting itself.
325 wxObject, wxObjectRefData, @ref overview_trefcount "Reference counting"
327 class wxObjectDataPtr
<T
>
332 This copy constructor increases the count of the reference
333 counted object to which @a tocopy points and then this
334 class will point to, as well.
336 wxObjectDataPtrT(T
* ptr
= NULL
);
337 wxObjectDataPtrT(const wxObjectDataPtr
<T
>& tocopy
);
341 Decreases the reference count of the object to which this
347 Gets a pointer to the reference counted object to which
353 Conversion to a boolean expression (in a variant which is not
354 convertable to anything but a boolean expression). If this class
355 contains a valid pointer it will return @e @true, if it contains
356 a @NULL pointer it will return @e @false.
358 operator unspecified_bool_type();
361 Returns a reference to the object. If the internal pointer is @NULL
362 this method will cause an assert in debug mode.
367 Returns a pointer to the reference counted object to which
368 this class points. If this the internal pointer is @NULL,
369 this method will assert in debug mode.
375 Assignment operators.
377 wxObjectDataPtrT
& operator operator=(const wxObjectDataPtr
<T
>& tocopy
);
378 wxObjectDataPtrT
& operator operator=(T
* ptr
);
383 // ============================================================================
384 // Global functions/macros
385 // ============================================================================
388 Used inside a class declaration to declare that the class should be
389 made known to the class hierarchy, but objects of this class cannot be created
390 dynamically. The same as DECLARE_ABSTRACT_CLASS.
392 #define DECLARE_CLASS() /* implementation is private */
395 Used inside a class declaration to declare that the class should be
396 made known to the class hierarchy, but objects of this class cannot be created
397 dynamically. The same as DECLARE_CLASS.
401 class wxCommand: public wxObject
403 DECLARE_ABSTRACT_CLASS(wxCommand)
412 #define DECLARE_ABSTRACT_CLASS() /* implementation is private */
415 Returns a pointer to the wxClassInfo object associated with this class.
417 #define wxClassInfo* CLASSINFO() /* implementation is private */
420 Same as @c reinterpret_castT(x) if the compiler supports reinterpret cast or
421 @c (T)x for old compilers.
423 @see wx_const_cast, wx_static_cast
425 T
wx_reinterpret_cast();
428 Used in a C++ implementation file to complete the declaration of a
429 class that has run-time type information and two base classes. The
430 same as IMPLEMENT_ABSTRACT_CLASS2.
432 #define IMPLEMENT_CLASS2() /* implementation is private */
435 This macro expands into @c const_castclassname *(ptr) if the compiler
436 supports @e const_cast or into an old, C-style cast, otherwise.
438 @see wx_const_cast, wxDynamicCast, wxStaticCast
440 classname
* wxConstCast();
443 Used in a C++ implementation file to complete the declaration of
444 a class that has run-time type information. The same as IMPLEMENT_CLASS.
448 IMPLEMENT_ABSTRACT_CLASS(wxCommand, wxObject)
450 wxCommand::wxCommand(void)
456 #define IMPLEMENT_ABSTRACT_CLASS() /* implementation is private */
459 Used in a C++ implementation file to complete the declaration of
460 a class that has run-time type information. The same as
461 IMPLEMENT_ABSTRACT_CLASS.
463 #define IMPLEMENT_CLASS() /* implementation is private */
466 This macro is equivalent to @c wxDynamicCast(this, classname) but the
467 latter provokes spurious compilation warnings from some compilers (because it
468 tests whether @c this pointer is non-@NULL which is always @true), so
469 this macro should be used to avoid them.
473 classname
* wxDynamicCastThis();
476 Used in a C++ implementation file to complete the declaration of
477 a class that has run-time type information, and whose instances
478 can be created dynamically. Use this for classes derived from two
481 #define IMPLEMENT_DYNAMIC_CLASS2() /* implementation is private */
484 Creates and returns an object of the given class, if the class has been
485 registered with the dynamic class system using DECLARE... and IMPLEMENT...
488 wxObject
* wxCreateDynamicObject(const wxString
& className
);
491 Used inside a class declaration to make the class known to wxWidgets RTTI
492 system and also declare that the objects of this class should be dynamically
493 creatable from run-time type information. Notice that this implies that the
494 class should have a default constructor, if this is not the case consider using
499 class wxFrame: public wxWindow
501 DECLARE_DYNAMIC_CLASS(wxFrame)
504 const wxString& frameTitle;
510 #define DECLARE_DYNAMIC_CLASS() /* implementation is private */
513 Same as @c const_castT(x) if the compiler supports const cast or
514 @c (T)x for old compilers. Unlike wxConstCast,
515 the cast it to the type @e T and not to @c T * and also the order of
516 arguments is the same as for the standard cast.
518 @see wx_reinterpret_cast, wx_static_cast
523 Used in a C++ implementation file to complete the declaration of
524 a class that has run-time type information and two base classes. The same as
527 #define IMPLEMENT_ABSTRACT_CLASS2() /* implementation is private */
530 This macro returns the pointer @e ptr cast to the type @e classname * if
531 the pointer is of this type (the check is done during the run-time) or
532 @NULL otherwise. Usage of this macro is preferred over obsoleted
533 wxObject::IsKindOf() function.
534 The @e ptr argument may be @NULL, in which case @NULL will be
539 wxWindow *win = wxWindow::FindFocus();
540 wxTextCtrl *text = wxDynamicCast(win, wxTextCtrl);
543 // a text control has the focus...
547 // no window has the focus or it is not a text control
551 @see @ref overview_runtimeclassoverview "RTTI overview", wxDynamicCastThis,
552 wxConstCast, wxStaticCast
554 classname
* wxDynamicCast();
557 This is defined in debug mode to be call the redefined new operator
558 with filename and line number arguments. The definition is:
561 #define WXDEBUG_NEW new(__FILE__,__LINE__)
564 In non-debug mode, this is defined as the normal new operator.
566 #define WXDEBUG_NEW() /* implementation is private */
569 This macro checks that the cast is valid in debug mode (an assert failure will
570 result if @c wxDynamicCast(ptr, classname) == @NULL) and then returns the
571 result of executing an equivalent of @c static_castclassname *(ptr).
573 @see wx_static_cast, wxDynamicCast, wxConstCast
575 classname
* wxStaticCast();
578 Same as @c static_castT(x) if the compiler supports static cast or
579 @c (T)x for old compilers. Unlike wxStaticCast,
580 there are no checks being done and the meaning of the macro arguments is exactly
581 the same as for the standard static cast, i.e. @e T is the full type name and
582 star is not appended to it.
584 @see wx_const_cast, wx_reinterpret_cast, wx_truncate_cast
589 Used in a C++ implementation file to complete the declaration of
590 a class that has run-time type information, and whose instances
591 can be created dynamically.
595 IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
597 wxFrame::wxFrame(void)
603 #define IMPLEMENT_DYNAMIC_CLASS() /* implementation is private */