Ref is a reference counted shared smart pointer implementation. When
all references to an object are destroyed, the object it references is
also destroyed. It is somewhat equivalent in functionality to Boosts
shared_ptr or intrusive_ptr. Boost, however, is a big
library, so the decision was made to avoid any dependencies of
Classdesc or Eco Lab on Boost.
Ref performs entire object life cycle management. Initialising it with an object makes a copy, it does not pass control of the object to the ref. As such, it requires that its target type has a default constructor. Assigning, or copying a ref object duplicates the reference to a single object. Dereferencing works as with traditional pointers.
Synopsis:
template <class T>
class ref
{
public:
ref(); // unitialised refs are NULL
ref(const ref& x);
ref(const T& x); //copies x
ref& operator=(const ref& x);
ref& operator=(const T& x); //copies x
T* operator->(); //dereference operators
T& operator*();
void nullify(); //set reference to NULL
bool nullref(); //returns true if invalid
operator bool (); //returns true if valid
bool operator==(const ref& x);
bool operator==(const T* x); //true if x points to this's target
bool operator==(const T& x); //true if x==this's target
};
Packing a ref object automatically invokes the pack_graph algorithm.