#ifndef _TOYPTR_H_
#define _TOYPTR_H_

template <typename T> class ToyPtr {
 public:
  // Constructor that accepts the ptr.
  ToyPtr(T *ptr) : ptr_(ptr) { }

  // Destructor that deletes the ptr.
  ~ToyPtr() {
    if (ptr_ != nullptr) {  // reminder: nullptr is C++11
      delete ptr_;
      ptr_ = nullptr;
    }
  }

  // Implement the "*" operator
  T &operator*() {
    return *ptr_;
  }

  // Implement the "->" operator
  T *operator->() {
    return ptr_;
  }

 private:
  // The pointer itself.
  T *ptr_;
};

#endif  // _TOYPTR_H_