sc::Ref< T > Class Template Reference

A template class that maintains references counts. More...

`#include <ref.h>`

Inheritance diagram for sc::Ref< T >:
[legend]
Collaboration diagram for sc::Ref< T >:
[legend]

## Public Member Functions

| Ref ()
| Create a reference to a null object.
| Ref (T *a)
| Create a reference to the object a.
| Ref (const Ref< T > &a)
| Create a reference to the object referred to by a.
template<class A >
| Ref (const Ref< A > &a)
| Create a reference to the object referred to by a.
| ~Ref ()
| Create a reference to the object a. More...
T * | operator-> () const
| Returns the reference counted object. More...
T * | pointer () const
| Returns a pointer the reference counted object.
RefCount * | parentpointer () const
| Implements the parentpointer pure virtual in the base class.
| operator T * () const
T & | operator* () const
| Returns a C++ reference to the reference counted object. More...
int | null () const
| Return 1 if this is a reference to a null object. More...
int | nonnull () const
| Return !null().
template<class A >
int | operator== (const Ref< A > &a) const
| A variety of ordering and equivalence operators are provided using the Identity class. More...
template<class A >
int | operator>= (const Ref< A > &a) const
template<class A >
int | operator<= (const Ref< A > &a) const
template<class A >
int | operator> (const Ref< A > &a) const
template<class A >
int | operator< (const Ref< A > &a) const
template<class A >
int | operator!= (const Ref< A > &a) const
int | compare (const Ref< T > &a) const
| Compare two objects returning -1, 0, or 1. More...
void | clear ()
| Refer to the null object.
Ref< T > & | operator= (const Ref< T > &c)
| Assignment to c.
template<class A >
Ref< T > & | operator= (const Ref< A > &c)
| Assignment to c.
Ref< T > & | operator<< (const RefBase &a)
| Assignment to the object that a references using dynamic_cast.
Ref< T > & | operator<< (RefCount *a)
| Assigns to the given base class pointer using dynamic_cast. More...
Ref< T > & | operator= (T *cr)
| Assignment to cr.
void | assign_pointer (T *cr)
| Assignment to cr.
void | check_pointer () const
| Check the validity of the pointer.
void | ref_info (std::ostream &os) const
| Print information about the reference to os.
void | warn (const char *s) const
| Print a warning concerning the reference.
Public Member Functions inherited from sc::RefBase
void | require_nonnull () const
| Requires that a nonnull reference is held. More...

## Additional Inherited Members

Protected Member Functions inherited from sc::RefBase
void | warn (const char *msg) const
| Print a warning message.
void | warn_ref_to_stack () const
| Called when stack data is referenced.
void | warn_skip_stack_delete () const
| Called when the deletion of stack data is skipped.
void | warn_bad_ref_count () const
| Called when the reference count is corrupted.
void | ref_info (RefCount *p, std::ostream &os) const
| Print information about the reference.
void | ref_info (std::ostream &os) const
void | check_pointer () const
void | reference (RefCount *)
int | dereference (RefCount *)

## Detailed Description

### template<class T>
class sc::Ref< T >

A template class that maintains references counts.

Several of these operations can cause a reference to an object to be replaced by a reference to a different object. If a reference to a nonnull object is eliminated, the object's reference count is decremented and the object is deleted if the reference count becomes zero.

There also may be a to convert to T*, where T is the type of the object which Ref references. Some compilers have bugs that prevent the use of operator T*(). The pointer() member should be used instead.

## Constructor & Destructor Documentation

template<class T>

sc::Ref< T >::~Ref | ( |  | ) |

inline

Create a reference to the object a.

Do a dynamic_cast to convert a to the appropiate type. Create a reference to the object a. Do a dynamic_cast to convert a to the appropiate type. Delete this reference to the object. Decrement the object's reference count and delete the object if the count is zero.

## Member Function Documentation

template<class T>

int sc::Ref< T >::compare | ( | const Ref< T > & | a | ) | const

inline

Compare two objects returning -1, 0, or 1.

Similar to the C library routine strcmp.

template<class T>

int sc::Ref< T >::null | ( |  | ) | const

inline

Return 1 if this is a reference to a null object.

Otherwise return 0.

template<class T>

T& sc::Ref< T >::operator* | ( |  | ) | const

inline

Returns a C++ reference to the reference counted object.

The behaviour is undefined if the object is null.

template<class T>

T* sc::Ref< T >::operator-> | ( |  | ) | const

inline

Returns the reference counted object.

The behaviour is undefined if the object is null.

template<class T>

Ref<T>& sc::Ref< T >::operator<< | ( | RefCount * | a | ) |

inline

Assigns to the given base class pointer using dynamic_cast.

If the dynamic_cast fails and the argument is nonnull and has a reference count of zero, then it is deleted.

template<class T>
template<class A >

int sc::Ref< T >::operator== | ( | const Ref< A > & | a | ) | const

inline

A variety of ordering and equivalence operators are provided using the Identity class.

The documentation for this class was generated from the following file:

- ref.h