简单实现智能指针
2014-11-22 13:30
316 查看
#ifndef _SMART_PTR_H #define _SMART_PTR_H template<class T> class CSmartPtr { private: T* m_pT; public: //构造函数 explicit CSmartPtr(T* p=NULL); //~析构函数 ~CSmartPtr(); T& operator*()const throw(); T* operator->()const throw(); T* get() const throw(); CSmartPtr<T>& operator =(const CSmartPtr<T>& s) throw(); void Reset(T* p); T* Release() throw(); }; template<class T> CSmartPtr<T>::CSmartPtr(T* p):m_pT(p) { } template<class T> CSmartPtr<T>::~CSmartPtr() { delete m_pT; m_pT=NULL; } //解析地址(*)运算符重载 template<class T> T& CSmartPtr<T>::operator*()const throw() { return *m_pT; } //成员访问(->)运算符重载 template<class T> T* CSmartPtr<T>::operator->()const throw() { return m_pT; } //取得智能指针内部指针值 template<class T> T* CSmartPtr<T>::get() const throw() { return m_pT; } //赋值运算符重载 template<class T> CSmartPtr<T>& CSmartPtr<T>::operator =(const CSmartPtr<T>& s) throw() { if(m_pT!=s.get()) { delete m_pT;//必须先清除原指针指向的内存 m_pT=s.get(); } return *this; } //重置智能指针指向的对象 template<class T> void CSmartPtr<T>::Reset(T* p) { if(m_pT!=p) { delete m_pT; m_pT=p; } } //传出智能指针内部指针值,并且智能指针放弃拥有权 template<class T> T* CSmartPtr<T>::Release() throw() { T*p=m_pT; m_pT=NULL; return p; } #endif
异常规范(Exception Specifications)
throw后面规定了该函数允许抛出什么类型的异常,空表示不抛出任何异常。这样写函数声明后,你在实现GetMonth时就不能有任何throw语句。
如果写为 int GetMonth( ) const throw(string);
函数实现时可以抛出string对象,其它类型的对象不允许。
相关文章推荐
- C++中智能指针的工作原理和简单实现
- 简单模拟实现c++智能指针-指针移交控制权
- 智能指针简单实现
- 智能指针的简单实现
- 实现一个简单的智能指针
- 用c++简单实现智能指针(转)
- 一个简单的C++智能指针的实现
- C++中智能指针的工作原理和简单实现
- C++中智能指针的工作原理和简单实现
- 【C++】智能指针auto_ptr的简单实现
- 模仿的智能指针的一个简单实现
- 用c++简单实现智能指针(转)
- C++中智能指针的工作原理和简单实现
- C++智能指针的简单实现代码
- C++ 最简单的 '智能指针' 的实现
- 一个简单的智能指针实现
- 智能指针auto_ptr的简单实现
- 智能指针原理与简单实现(转)
- C++中智能指针的工作原理和简单实现
- C++智能指针的简单实现