It is frequently very useful to be able to keep track of garbage collectable objects through the use of ``weak pointers.'' Collectors ignore the presence of weak pointers to garbage collected objects; objects with only referencing weak pointers will still be collected. Weak pointers to objects that become garbage will be automatically reset to null.
Weak pointers are provided through a smart pointer template WeakPointer , whose definition is shown below:
template <class T> class WeakPointer {
public:
inline WeakPointer();
inline WeakPointer(const WeakPointer<T>& wp);
inline WeakPointer(T * ptr);
inline WeakPointer<T>& operator = (const WeakPointer<T>& wp);
inline WeakPointer<T>& operator = (T * ptr);
inline bool is_null() const;
inline operator const T * () const;
inline operator T * ();
inline const T * operator -> () const;
inline T * operator -> ();
inline const T& operator * () const;
inline T& operator * ();
};
A weakpointer to a garbage collectable
class A can be defined as WeakPointer<A>.
If a Prop datatype T has been defined, a weakpointer to type
T can defined using the
classof keyword. For example:
datatype Wff :: collectable = True | False | And(...) | ...; WeakPointer<classof Wff> a = And(True,False);