Listing 7

// synopsis of template class shared_ptr

template<class Ty> class shared_ptr {
public:
  typedef Ty element_type;
  shared_ptr();
  template<class Other>
    explicit shared_ptr(Other *ptr);
  template<class Other, class D>
    shared_ptr(Other *ptr, D dtor);
  shared_ptr(const shared_ptr& sp);
  template<class Other>
    shared_ptr(const shared_ptr<Other>& sp);
  template<class Other>
    shared_ptr(const weak_ptr<Other>& wp);
  template<class Other>
    shared_ptr(const auto_ptr<Other>& ap);
  ~shared_ptr();
  shared_ptr& operator=(const shared_ptr& sp);
  template<class Other>
    shared_ptr& operator=(const shared_ptr<Other>& sp);
  template<class Other>
    shared_ptr& operator=(const auto_ptr<Other>& ap);
  void swap(shared_ptr& sp);
  void reset();
  template<class Other>
    void reset(Other *ptr);
  template<class Other, class D>
    void reset(Other *ptr, D dtor);
  Ty *get() const;
  Ty& operator*() const;
  Ty *operator->() const;
  operator boolean-type() const;

  long use_count() const;
  bool unique() const;
};