X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0a9a84c09e9c8a85617536d62400c469b6cc62c..4e15d1caa03346c126015019c1fdf093033ef40b:/docs/doxygen/overviews/refcount.h diff --git a/docs/doxygen/overviews/refcount.h b/docs/doxygen/overviews/refcount.h index 48a2bf1bb7..bcddbd5e7d 100644 --- a/docs/doxygen/overviews/refcount.h +++ b/docs/doxygen/overviews/refcount.h @@ -3,24 +3,14 @@ // Purpose: topic overview // Author: wxWidgets team // RCS-ID: $Id$ -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// /** @page overview_refcount Reference Counting -@li @ref overview_refcount_ignore -@li @ref overview_refcount_equality -@li @ref overview_refcount_destruct -@li @ref overview_refcount_list -@li @ref overview_refcount_object - - -
- - -@section overview_refcount_ignore Why You Shouldn't Care About It +@tableofcontents Many wxWidgets objects use a technique known as reference counting, also known as copy on write (COW). This means that when an object is @@ -41,12 +31,13 @@ operation on it is the same. @section overview_refcount_equality Object Comparison -The == and != operators of the reference counted classes always do a @c deep -comparison. This means that the equality operator will return @true if two -objects are identical and not only if they share the same data. +The == and != operators of @ref overview_refcount_list "the reference counted classes" +always do a deep comparison. This means that the equality operator +will return @true if two objects are identical and not only if they share the +same data. Note that wxWidgets follows the STL philosophy: when a comparison -operator can not be implemented efficiently (like for e.g. wxImage's == +operator cannot be implemented efficiently (like for e.g. wxImage's == operator which would need to compare the entire image's data, pixel-by-pixel), it's not implemented at all. That's why not all reference counted classes provide comparison operators. @@ -77,6 +68,12 @@ operators and copy constructors since they are reference-counted: @li wxBrush @li wxCursor @li wxFont +@li wxGraphicsBrush +@li wxGraphicsContext +@li wxGraphicsFont +@li wxGraphicsMatrix +@li wxGraphicsPath +@li wxGraphicsPen @li wxIcon @li wxImage @li wxMetafile @@ -90,19 +87,20 @@ operators and copy constructors since they are reference-counted: Note that the list above reports the objects which are reference counted in all ports of wxWidgets; some ports may use this technique also for other classes. -All the objects implement a function IsOk() to test if they are referencing valid -data; when the objects are in uninitialized state, you can only use the IsOk() getter; -trying to call any other getter, e.g. wxBrush::GetStyle() on the ::wxNullBrush object, -will result in an assert failure in debug builds. +All the objects implement a function @b IsOk() to test if they are referencing +valid data; when the objects are in uninitialized state, you can only use the +@b IsOk() getter; trying to call any other getter, e.g. wxBrush::GetStyle() on +the ::wxNullBrush object, will result in an assert failure in debug builds. @section overview_refcount_object Making Your Own Reference Counted Class -Reference counting can be implemented easily using wxObject and wxObjectRefData -classes. Alternatively, you can also use the wxObjectDataPtr template. +Reference counting can be implemented easily using wxObject or using the +intermediate wxRefCounter class directly. Alternatively, you can also use the +wxObjectDataPtr template. -First, derive a new class from wxObjectRefData and put there the -memory-consuming data. +First, derive a new class from wxRefCounter (or wxObjectRefData when using a +wxObject derived class) and put the memory-consuming data in it. Then derive a new class from wxObject and implement there the public interface which will be seen by the user of your class. You'll probably want to add a @@ -120,9 +118,8 @@ In fact, any time you need to read the data from your wxObject-derived class, you will need to call this function. @note Any time you need to actually modify the data placed inside your wxObject -derived class, you must first call the wxObject::UnShare function to ensure +derived class, you must first call the wxObject::UnShare() function to ensure that the modifications won't affect other instances which are eventually sharing your object's data. */ -