wxObjectRefData Class Reference
[Runtime Type Information (RTTI)]

#include <wx/object.h>

Inheritance diagram for wxObjectRefData:

wxDataViewModel wxDataViewIndexListModel wxDataViewTreeStore wxDataViewVirtualListModel

List of all members.


Detailed Description

This class is used to store reference-counted data.

Derive classes from this to store your own data. When retrieving information from a wxObject's reference data, you will need to cast to your own derived class.

Example:

    // include file

    class MyCar: public wxObject
    {
    public:
        MyCar() { }
        MyCar( int price );

        bool IsOk() const { return m_refData != NULL; }

        bool operator == ( const MyCar& car ) const;
        bool operator != (const MyCar& car) const { return !(*this == car); }

        void SetPrice( int price );
        int GetPrice() const;

    protected:
        virtual wxObjectRefData *CreateRefData() const;
        virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;

        DECLARE_DYNAMIC_CLASS(MyCar)
    };


    // implementation

    class MyCarRefData: public wxObjectRefData
    {
    public:
        MyCarRefData()
        {
            m_price = 0;
        }

        MyCarRefData( const MyCarRefData& data )
            : wxObjectRefData()
        {
            m_price = data.m_price;
        }

        bool operator == (const MyCarRefData& data) const
        {
            return m_price == data.m_price;
        }

        int m_price;
    };


    #define M_CARDATA ((MyCarRefData *)m_refData)

    IMPLEMENT_DYNAMIC_CLASS(MyCar,wxObject)

    MyCar::MyCar( int price )
    {
        m_refData = new MyCarRefData();
        M_CARDATA->m_price = price;
    }

    wxObjectRefData *MyCar::CreateRefData() const
    {
        return new MyCarRefData;
    }

    wxObjectRefData *MyCar::CloneRefData(const wxObjectRefData *data) const
    {
        return new MyCarRefData(*(MyCarRefData *)data);
    }

    bool MyCar::operator == ( const MyCar& car ) const
    {
        if (m_refData == car.m_refData) return true;

        if (!m_refData || !car.m_refData) return false;

        return ( *(MyCarRefData*)m_refData == *(MyCarRefData*)car.m_refData );
    }

    void MyCar::SetPrice( int price )
    {
        UnShare();

        M_CARDATA->m_price = price;
    }

    int MyCar::GetPrice() const
    {
        wxCHECK_MSG( IsOk(), -1, "invalid car" );

        return (M_CARDATA->m_price);
    }

Library:  wxBase

Category:  Runtime Type Information (RTTI)

See also:
wxObject, wxObjectDataPtr<T>, Reference Counting

Public Member Functions

 wxObjectRefData ()
void DecRef ()
int GetRefCount () const
void IncRef ()

Protected Member Functions

virtual ~wxObjectRefData ()

Constructor & Destructor Documentation

virtual wxObjectRefData::~wxObjectRefData (  )  [protected, virtual]

Destructor.

It's declared protected so that wxObjectRefData instances will never be destroyed directly but only as result of a DecRef() call.

wxObjectRefData::wxObjectRefData (  ) 

Default constructor. Initialises the internal reference count to 1.


Member Function Documentation

void wxObjectRefData::DecRef (  ) 

Decrements the reference count associated with this shared data and, if it reaches zero, destroys this instance of wxObjectRefData releasing its memory.

Please note that after calling this function, the caller should absolutely avoid to use the pointer to this instance since it may not be valid anymore.

int wxObjectRefData::GetRefCount (  )  const

Returns the reference count associated with this shared data.

When this goes to zero during a DecRef() call, the object will auto-free itself.

void wxObjectRefData::IncRef (  ) 

Increments the reference count associated with this shared data.



wxWidgets logo

[ top ]