template class axl::rc::Ptr

#include <axl_rc_Ptr.h>

template <typename T>
class Ptr
{
public:
    // construction

    Ptr();
    Ptr(const NullPtr&);
    Ptr(const Ptr& src);

    template <typename A>
    Ptr(const Ptr<A>& src);

    template <typename A>
    Ptr(const WeakPtr<A>& src);

    template <typename A>
    Ptr(A* p);

    Ptr(
        T* p,
        RefCount* refCount
        );
    ~Ptr();

    // methods

    operator T *() const;

    T*
    operator->() const;

    Ptr&
    operator=(const NullPtr&);

    Ptr&
    operator=(const Ptr& src);

    T*
    p() const;

    RefCount*
    getRefCount() const;

    void
    copy(
        T* p,
        RefCount* refCount
        );

    void
    attach(
        T* p,
        RefCount* refCount
        );

    T*
    detach(RefCount** refCount = NULL);

    void
    clear();
};