13.9Write a smart pointer (smart_ptr) class
template<class T>class SmartPoint{ public: SmartPoint(T *ref){ ref_ = ref; count_ = (unsigned int *)malloc(sizeof(unsigned int )); *count_ = 1; } SmartPoint(SmartPoint<T> &sptr){ ref_ = sptr.ref_; count_ = sptr.count_; ++(*count_); } SmartPoint<T>& operator =(SmartPoint<T> &sptr) { if(this != sptr){ ref_ = sptr.ref_; count_ = sptr.count_; ++(*count_); } return *this; } ~SmartPoint() { --(*count_); if(*count_ == 0) { delete ref_; free(count_); ref_ = NULL; count_ = NULL; } } T getValue(){ rturn *ref_; } private: T* ref_; unsigned int *count_; };